【问题标题】:Warning MSB3243, conflict between signed and unsigned assemblies警告 MSB3243,签名和未签名程序集之间的冲突
【发布时间】:2019-11-01 10:10:01
【问题描述】:

我有一个项目,其中包含对 snt.ScintillaNet.FindReplaceDialog 的 NuGet 包引用。
这个包又引用了未签名的包ScintillaNET

我的应用程序必须经过签名,因此我引用了 ScintillaNET 包的签名版本。
这很好用,应用程序运行良好。 但是,在构建时,我收到以下警告:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2106,5):警告 MSB3243:无法解决“ScintillaNET”之间的冲突,版本=3.6.3.0,文化=中性,PublicKeyToken=d42c48f11a620156”和“ScintillaNET,版本=3.6.3.0,文化=中性,PublicKeyToken=null”。任意选择“ScintillaNET, Version=3.6.3.0, Culture=neutral, PublicKeyToken=d42c48f11a620156”。

这是有道理的,构建系统看到 2 个引用,一个已签名,一个未签名。
然后它会选择我想要的(签名),一切正常。

我想从构建中删除该警告。
我试图在项目中将MSB3243 作为警告异常,但由于它是 MSBuild 警告而不是编译器警告,因此不能忽略。

我想出了一个非常丑陋的技巧,我将把它记下来作为答案,以帮助遇到相同问题的其他人(以及当我忘记解决方案时的我自己)。

【问题讨论】:

    标签: .net msbuild


    【解决方案1】:

    为了解决这个问题,我要求构建系统忽略未签名的版本。
    为此,我将 NuGet 包的未签名版本与签名版本一起明确添加到项目中。
    然后我手动将 .csproj 文件中的引用更改为以下内容:

    <!-- Hack to prevent the unsigned library to load and raise an assembly conflict --> <PackageReference Include="jacobslusser.ScintillaNET"> <Version>3.6.3</Version> <ExcludeAssets>all</ExcludeAssets> </PackageReference>

    这可以防止在 NuGet 包解析期间复制所有工件。

    它很丑但是很有效,所以我想用一种更简洁的方式来达到同样的效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2011-12-20
      • 1970-01-01
      相关资源
      最近更新 更多