我在此板上看到了几个类似的问题,但我认为可能会导致此消息的几个问题,而我的特定问题可能不在其中,当然,我的解决方案看上去比任何一个都简单,有效得多。其他人。
我有一个正在使用packages.config的项目。
我使用Visual Studio UI将项目引用从package.config迁移到PackageReference(https://devblogs.microsoft.com/nuget/migrate-packages-config-to-package-reference/)。我这样做是因为它允许使用msbuild / t:restore mysln.sln进行构建-不适用于packages.config。
我认为这通常是可行的(我在其他项目上尝试了5到6次)。但是当我重建一个项目时,我收到了错误消息:
c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\v16.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(236,9): error MSB3188: Assembly 'C:\Users\lew
is\.nuget\packages\mousekeyhook\5.6.0\lib\net40\Gma.System.MouseKeyHook.dll' must be strong signed in order to be marked as a prerequisite.
答案 0 :(得分:1)
我对这个问题的解决方案:
完成-错误消失了。
.CSPROJ DIFF FOR FIX:
index f0abf00..f87ab3e 100644
--- a/X.csproj
+++ b/X.csproj
@@ -123,6 +123,9 @@
-->
<ItemGroup>
<Reference Include="Accessibility" />
+ <Reference Include="Gma.System.MouseKeyHook">
+ <HintPath>..\ThirdPartyComponents\Gma.System.MouseKeyHook.dll</HintPath>
+ </Reference>
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
@@ -632,9 +635,6 @@
<PackageReference Include="log4net">
<Version>2.0.8</Version>
</PackageReference>
- <PackageReference Include="MouseKeyHook">
- <Version>5.6.0</Version>
- </PackageReference>
<PackageReference Include="Newtonsoft.Json">
<Version>12.0.3</Version>
</PackageReference>
显然拥有a需要签名内容,而拥有常规则不需要签名。
答案 1 :(得分:0)
有关所需的已签名程序集的错误消息通常以以下组合显示:
您可以通过创建一个新的VSTO Word加载项并通过NuGet引用NGenerics版本1.5.3轻松地重现这一点。
(另一个原因可能是被引用程序集的版本冲突,例如您通过NuGet引用了程序集A和B,而A本身引用了B的不同版本;那么您将必须引用与A相同的B版本。 )
借助Microsoft Service调用,我们发现在这种情况下,构建过程在内部将引用的程序集(在我们的示例中为NGenerics v.5.3.3)标记为CopyLocal=false
。如果对NuGet使用packages.config而不是PackageReferences,并在“属性”窗口中将引用的程序集标记为CopyLocal=false
,则会出现相同的编译错误。
解决方案:
使用packages.config时,将受影响的程序集的程序集引用属性设置为CopyLocal=true
。
使用PackageReferences时,请手动编辑项目文件并添加资产选项,如下例所示:
<PackageReference Include="NGenerics">
<Version>1.5.3</Version>
<ExcludeAssets>compile</ExcludeAssets>
</PackageReference>
ExcludeAssets
和IncludeAssets
设置的名称具有误导性。 ExcludeAssets
会将提到的项目复制到输出中,而IncludeAssets
则使它们无法进入输出目录。您最好说<IncludeAssets>none</IncludeAssets>
。
请参阅https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files
答案 2 :(得分:0)
我保留了其他答案,因为它可能对其他项目有所帮助。但是,对于VSTO,情况是根据我们提出的Microsoft支持案例得出的:
您可以通过以下方式鼓励对PackageReferences的支持: VSTO projects created in Visual Studio 2019 do not support Package Reference as the package management format