【发布时间】:2016-06-15 17:14:50
【问题描述】:
我正在开发一个设置为仅在线的 ClickOnce 应用程序。我将它发布到内部 IIS 服务器,在包含此链接的同一目录中有一个 HTML 页面:
<a href="MyAppName.application"></a>
部署看起来像这样,除了HTML 页面之外的所有文件都是由我的项目的publish 目标生成的:
MyAppName
-> Application Files
-> MyAppName_2213_20_0_65
-> <The published files>
-> default.html
-> MyAppName.application
当我点击链接时,应用程序立即运行,没有任何确认提示,我从关于框中看到它是旧版本。当我浏览到文件共享并通过在资源管理器中双击它来启动 MyAppName.application 时,我收到提示,询问我是否要运行它,然后它下载并出现错误:
无法安装此应用程序,因为已安装具有相同标识的应用程序。要安装此应用程序,请修改此应用程序的清单版本或卸载预先存在的应用程序。
作为构建过程的一部分,我将项目的InstallUrl 属性设置为http://ourserver/MyAppName/MyAppName.application。那是错的吗?它应该是包含链接的 HTML 页面吗?它如何确定产生冲突的“身份”?
由于该应用仅供在线使用,因此未安装且未显示在“程序和功能”控制面板中(因此该部分错误消息不适用)。
我是 ClickOnce 的新手,如果我遗漏了一些有用的信息,请告诉我。
更新
如果我从 Visual Studio 命令提示符运行 mage -cc,则会启动新版本而不是旧版本。
更新 2
随着我四处寻找,我发现一些看起来有问题的东西,并且可能是问题所在。我在 MyAppName.application 文件(部署清单)中看到以下两行:
...
<assemblyIdentity name="MyAppName" version="1.0.0.0" ...
...
<dependency>
<dependentAssembly dependencyType="install" codebase="Application Files\MyAppName_2213_20_0_65\MyAppName.exe.manifest" size="82044">
<assemblyIdentity name="MyAppName.exe" version="1.0.0.0" ...
...
你可以看到上面的不匹配。它正在部署到MyAppName_2213_20_0_65,但它认为exe 的版本号是1.0.0.0。我不确定它为什么这么认为。我的项目包含一个作为构建的一部分生成的文件:
[assembly: AssemblyVersion("2213.20.0.65")]
然后,要设置发布的版本号,我的 csproj 文件中有这个:
<Target Name="BeforePublish">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="MyAppAssemblyInfo" />
</GetAssemblyIdentity>
<PropertyGroup>
<ApplicationVersion>%(MyAppAssemblyInfo.Version)</ApplicationVersion>
<InstallUrl>$(INSTALL_URL)</InstallUrl>
</PropertyGroup>
</Target>
为我的可执行文件列出的程序集版本是否重要?如果是,为什么会卡在 1.0.0.0,会不会影响更新版本的下载?
【问题讨论】:
标签: winforms windows-7 clickonce