我正在尝试使用C#4.0编译excel插件,并在Visual Studio中构建项目时开始出现此问题。重要的是要告诉您我以前从未遇到过此问题。什么会导致这种情况发生?
我正在尝试使用C#4.0编译excel插件,并在Visual Studio中构建项目时开始出现此问题。重要的是要告诉您我以前从未遇到过此问题。什么会导致这种情况发生?
Answers:
我的猜测是您不使用强命名程序集。当两个项目引用同一个程序集的版本稍有不同,而另一个依赖项引用这些项目时,我遇到了此错误。我的解决方法是从.csproj文件中的程序集名称中删除键和版本信息(无论如何都没有关系),然后执行干净的构建。
不同程序集版本之间的更改与解决方案中引用它们的部分兼容。如果您不是这种情况,则可能需要做更多的工作来解决问题。
使用NuGet,在以下情况下很容易陷入这种情况:
这将导致解决方案中的两个项目引用该程序包程序集的不同版本。如果其中一个引用另一个,并且是ClickOnce应用程序,则会看到此问题。
要解决此问题,请update-package [package name]
在Nuget软件包管理器控制台中发出命令,以使所有内容都达到一个公平的竞争环境,这时问题就消失了。
除非有令人信服的理由,否则您应该在解决方案级别而不是项目级别管理NuGet软件包。解决方案级别的软件包管理避免了多种版本的依赖关系。使用管理UI时,如果“ 合并”选项卡显示1个或多个软件包具有多个版本,请考虑将它们合并为一个。
遇到此问题时,我通过关闭“启用ClickOnce安全设置”来解决此问题。
菜单:项目| “项目名称”属性... | 安全标签| “启用ClickOnce安全设置”复选框。
看到这个答案。
转到发布页面,然后单击“应用程序文件”。从那里,您应该看到DLL的列表。确保给您带来麻烦的用户的发布状态标记为“包括”,而不是“先决条件”。
您需要用钥匙在组件上签名。进入选项卡签名下的项目属性:
为可能会帮助您的任何人添加针对此问题的解决方案。
我有一个ClickOnce解决方案,抛出此错误。该应用程序引用了一个常见的“库”文件夹,并包含了对的项目引用Foo.dll
。虽然解决方案中的所有项目都没有引用Foo.dll
“ Libs”文件夹中的静态副本,但该文件夹中的某些引用却引用了(即:我的解决方案具有Libs\Bar.dll
引用的引用Foo.dll
。)由于CO应用程序从中提取了所有依赖项Libs
以及它们的依赖关系,两个副本都进入了项目。这是产生上面的错误。
我通过将Libs\Foo.dll
静态版本移到子文件夹中解决了该问题Libs\Fix\Foo.dll
。此更改使ClickOnce应用程序仅使用DLL的项目版本,错误消失了。
删除DLL(发生错误的地方)并重新构建解决方案,解决了我的问题。谢谢
如果您尝试了此问题的所有其他答案,则您:
...您的项目的引用中可能有NuGet包DLL的单独版本,因为Intellisense / ReSharper创建的引用将是“常规”引用,而不是预期的NuGet引用,因此NuGet更新过程不会找不到或更新它!
要解决此问题,请在项目A中删除引用,然后使用NuGet进行安装,并确保所有项目中的NuGet软件包均为相同版本。(如该答案中的解释)
只要ReSharper / Intellisense建议为您的项目添加引用,就会出现此问题。与上面的示例相比,它可能更令人费解,具有多个交织的项目和依赖项,因此很难进行追踪。如果ReSharper / Intellisense建议的引用实际上来自NuGet软件包,请使用NuGet进行安装。
将Excel插件从packages.config迁移到PackageReference后,我遇到了此问题。似乎与此问题有关。
如果您不使用ClickOnce,则以下方法可以作为一种粗略的解决方法(它将忽略.manifest
文件中的所有依赖项信息):
查找如下所示的部分:
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
编辑引用.targets
文件的重命名副本(在我的情况下,文件解析为C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
副本,我Microsoft.VisualStudio.Tools.Office_FIX.targets
在同一文件夹中进行了复制-并未检查它是否在其他文件夹中工作)。
找到该GenerateApplicationManifest
元素并将其属性更改Dependencies="@(DependenciesForGam)"
为Dependencies=""
。
更改2.中找到的部分,以引用您的已编辑.targets
文件。
每当.targets
VS附带的文件版本更新(或您将无法获得更新)时,都必须重复执行此操作,但是我希望它将很快得到修复...
程序集是否正确签名?
要对此进行检查,请在项目上按Alt + Enter(或右键单击,然后单击“属性”)。转到“签名”。验证是否已选中“对程序集签名”复选框,并且选中了强名称密钥文件,并且未选中 “仅延迟签名” 。
现在这是解决问题的另一种方法:
右键单击项目,然后选择“卸载项目”选项。您会发现您的项目不可用。
右键单击不可用的项目,然后选择“编辑”选项。
向下滚动到包含所有资源标签的“ <ItemGroup>”标签。
现在转到错误列表中已显示的参考,您会注意到它使用单个标签(即< Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >
)。
将其更改为如下所示:
。
<Reference Include="assemble_name_here, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
< Private > True < / Private >
< HintPath > path_here\assemble_name_here.dll < / HintPath >
< / Reference >
在这里尝试了大多数解决方案之后,我终于从单击一次项目中添加了对该项目的引用,将其从Include更改为Include(Auto),并且终于可以使用了。
如果它与依赖项依赖项不匹配,请转到解决方案级别的NuGet程序包管理器,然后检查“更新”和“合并”选项卡,将其全部协调。
尝试使用update-package -reinstall -ignoredependencies
bin
和obj
文件夹,然后重新构建项目。有时这可行。