【问题标题】:ClickOnce deployment with Roslyn assemblies: manifest version mismatch使用 Roslyn 程序集进行 ClickOnce 部署:清单版本不匹配
【发布时间】:2013-09-04 13:27:41
【问题描述】:

我正在尝试部署一个 Clickonce 应用程序,该应用程序通过 Nuget 包引用 Roselyn 程序集。

Roslyn Nuget 软件包的版本为 1.2.20906.2,但是:

  1. 当我查看 packages 文件夹中的 dll 属性时,我看到 DLL 的版本为 1.2.20906.1
  2. 当我查看 VS2012 Solution Explorer 中的 references 属性时,它显示 version 1.2.0.0(路径指向 Nuget包dll)
对于所有 Roslyn 引用,

Local copy 设置为 true,Specific version 也是如此。

当我发布 clickonce 时,包含和部署的 Dll 的版本为 1.2.20906.1,但 Clickonce 清单指出:

<dependency>
    <dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Roslyn.Services.dll" size="1345672">
        <assemblyIdentity name="Roslyn.Services" version="1.2.0.0" publicKeyToken="31BF3856AD364E35" language="neutral" processorArchitecture="msil" />
...

所以清单中的版本是 1.2.0.0。

当我尝试在客户端上安装 Clickonce 时,我收到一条错误消息(翻译自法语):Reference in the manifest does not match the identity of the downloaded assembly Roslyn.Services.dll

客户端机器是 Windows 7 x86。

我尝试在我的 VS 项目中定位 AnyCPUx86,但没有成功。

当我在目标机器上通过 xcopy 部署时,应用运行良好。

任何帮助表示赞赏。

【问题讨论】:

  • 我不知道具体的ClickOnce问题,但我会指出文件版本和程序集版本是完全独立的,它们不同是很常见的。事实上,作为 VS 或 .Net 一部分的每个程序集都有不同于程序集版本的文件版本。
  • @KevinPilch-Bisson:感谢您的评论。我实际上想知道,因为对于我项目中的其他引用,ClickOnce 清单中的文件版本和程序集版本之间存在匹配。另外我想知道这个问题是否是我特有的,以及其他人是否能够成功地进行 ClickOnce 部署,包括最新的 Roslyn 程序集。

标签: c# visual-studio-2012 clickonce roslyn


【解决方案1】:

VS 中的引用指向哪里?它是否指向包文件夹?如果不是,它应该,因为这是您要部署的程序集。您应该删除引用并重新添加它,指向您要部署的版本。它可能正在访问 GAC 中的旧版本,然后发布新版本,这是行不通的。 ClickOnce 非常具体,版本必须匹配。

【讨论】:

  • 它指向 Nuget 包,但我怀疑 GAC 版本无论如何都已部署。我该如何验证这一点?
  • 本地引用优先于 GAC,假设程序集不需要在 GAC 中使用。例如,DirectX 可以是本地的,但 SQLExpress 不能。我认为它只是没有指向你认为它指向的地方。对于 grins,将要使用的 dll 复制到与项目相同的文件夹中,并将其添加到项目中并添加对它的引用。看看这是否有效。如果是这样,那么您的初始版本没有访问您认为它正在访问的内容。
  • 我做了一些额外的检查:问题不在于部署的 dll,因为 clickonce 部署的 dll 是好的(来自 NuGet 包的)。问题在于 clickonce 认为它应该部署的版本。 (所以清单中有问题...?)
猜你喜欢
  • 2011-07-17
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多