Visual Studio从nuget包/ build目录中错误地引用了程序集

埃里克·罗勒(Eric Roller)

我有一个C#项目(ProjectA),它在一个单独的过程中调用另一个C#项目(ProjectB)。构建输出目录结构为:

/ProjectA.exe
/ProjectB/ProjectB.exe

ProjectA和ProjectB引用同一程序集的不同版本,在本例中为Newtonsoft.Json.dll。

通过将ProjectB的nuget包添加到ProjectA,可以实现生成输出目录的结构。ProjectA和ProjectB在单独的解决方案中,并且分别构建。ProjectB的nuget包是使用以下.nuspec和.targets创建的。

<?xml version="1.0"?>
<package>
  <metadata>
    <id>ProjectB</id>
    <version>$version$</version>
    <title>ProjectB</title>
    <authors>me</authors>
    <owners>me</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>ProjectB</description>
    <copyright>Copyright 2016</copyright>
    <tags>ProjectB</tags>
  </metadata>
  <files>
    <file src="x64\Release\*" target="build" />
    <file src="ProjectB.targets" target="build/ProjectB.targets" /> 
  </files>
</package>  

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <NativeLibs Include="$(MSBuildThisFileDirectory)*" />
    <Content Include="@(NativeLibs)">
      <Link>ProjectB\%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

我的问题是ProjectA从ProjectB nuget包/ build目录中引用了较新的Newtonsoft.Json.dll,而不是ProjectA解决方案中较旧的Newtonsoft.Json.dll。它们是不同的版本,因此在运行时会引起问题。我意识到我可以在ProjectA解决方案中更新Newtonsoft.Json.dll的版本,但是我希望能够解决更通用的情况。如何防止Visual Studio找到错误的Newtonsoft.Json.dll?

埃里克·罗勒(Eric Roller)

最后,将链接的项目组与所有ProjectB程序集一起添加始终会导致将错误的程序集版本拖入ProjectA的问题。我不得不求助于robocopy postbuild命令来完成我想要的事情。缺点是当另一个项目引用ProjectA时,不会复制ProjectB程序集,但这对我而言并不重要。如果Microsoft使用魔术程序集路径解决了问题,则原始问题中的nuget程序包应该可以正常工作。以下是使用robocopy解决方法的.nuspec和.targets文件。

<?xml version="1.0"?>
<package>
  <metadata>
    <id>ProjectB</id>
    <version>$version$</version>
    <title>ProjectB</title>
    <authors>me</authors>
    <owners>me</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>ProjectB</description>
    <copyright>Copyright 2016</copyright>
    <tags>ProjectB</tags>
  </metadata>
  <files>
    <file src="x64\Release\*" target="build/ProjectB" />
    <file src="ProjectB.targets" target="build/ProjectB.targets" /> 
  </files>
</package>  

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="ProjectBCopyTarget" AfterTargets="Build">
        <Exec Command="robocopy /PURGE $(MSBuildThisFileDirectory)ProjectB $(TargetDir)ProjectB || if %ERRORLEVEL% LSS 8 exit 0"/>
    </Target>
</Project>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Visual Studio 2017中的Nuget包错误

来自分类Dev

使用nuget程序包自动配置VSIX的Visual Studio

来自分类Dev

Visual Studio中缺少Nuget软件包

来自分类Dev

构建和 Visual Studio 中的 NuGet 包还原

来自分类Dev

在Visual Studio 2015中新的Nuget类库模板中的NuGet包引用问题

来自分类Dev

Visual Studio的程序集与nuget包中的System.Net.Http

来自分类Dev

Visual Studio 2015 Update 2中的Nuget.org不会获取nuget包

来自分类Dev

NuGet; 无法在Visual Studio 2012中报告错误版本的程序包

来自分类Dev

如何从Visual Studio 2015中的自定义包源更新NuGet包?

来自分类Dev

如何在Visual Studio项目中更改NuGet程序包引用以使用Nuget.config

来自分类Dev

在Visual Studio 2015解决方案中还原所有Nuget程序包

来自分类Dev

Nuget程序包HotTowel.Angular.Breeze在Visual Studio 2015中安装失败

来自分类Dev

在Visual Studio中安装NUGET软件包时发生错误

来自分类Dev

Visual Studio 2015-NuGet包删除所有项目引用

来自分类Dev

Nuget还原程序包开始在Visual Studio Team Services构建中失败

来自分类Dev

如何在Visual Studio Team Services中发布和访问nuget程序包

来自分类Dev

Visual Studio 2013-为每个项目设置Nuget程序包

来自分类Dev

Visual Studio 2015 RC1-管理Nuget程序包

来自分类Dev

Visual Studio NuGet:为什么不执行依赖程序包的.targets文件?

来自分类Dev

是否有任何NuGet API可以从Visual Studio Extension项目创建程序包

来自分类Dev

Visual Studio的Nuget程序包对话框中使用哪种类型的ItemsControl?

来自分类Dev

如何在Visual Studio Team Services中发布和访问nuget程序包

来自分类Dev

从Visual Studio NuGet管理器安装MailChimp.NET程序包

来自分类Dev

在Visual Studio中更新解决方案级别的nuget软件包

来自分类Dev

在Visual Studio中安装Xamarin.Forms Nuget软件包时出错

来自分类Dev

如何在Mac的Visual Studio Code中查看NuGet包实现源?

来自分类Dev

Visual Studio MonoGame NuGet软件包中不再包含MonoGame管道工具吗?

来自分类Dev

如何将 Nuget 包添加到我的 Visual Studio 扩展中的项目?

来自分类Dev

从Visual Studio构建NuGet软件包

Related 相关文章

  1. 1

    Visual Studio 2017中的Nuget包错误

  2. 2

    使用nuget程序包自动配置VSIX的Visual Studio

  3. 3

    Visual Studio中缺少Nuget软件包

  4. 4

    构建和 Visual Studio 中的 NuGet 包还原

  5. 5

    在Visual Studio 2015中新的Nuget类库模板中的NuGet包引用问题

  6. 6

    Visual Studio的程序集与nuget包中的System.Net.Http

  7. 7

    Visual Studio 2015 Update 2中的Nuget.org不会获取nuget包

  8. 8

    NuGet; 无法在Visual Studio 2012中报告错误版本的程序包

  9. 9

    如何从Visual Studio 2015中的自定义包源更新NuGet包?

  10. 10

    如何在Visual Studio项目中更改NuGet程序包引用以使用Nuget.config

  11. 11

    在Visual Studio 2015解决方案中还原所有Nuget程序包

  12. 12

    Nuget程序包HotTowel.Angular.Breeze在Visual Studio 2015中安装失败

  13. 13

    在Visual Studio中安装NUGET软件包时发生错误

  14. 14

    Visual Studio 2015-NuGet包删除所有项目引用

  15. 15

    Nuget还原程序包开始在Visual Studio Team Services构建中失败

  16. 16

    如何在Visual Studio Team Services中发布和访问nuget程序包

  17. 17

    Visual Studio 2013-为每个项目设置Nuget程序包

  18. 18

    Visual Studio 2015 RC1-管理Nuget程序包

  19. 19

    Visual Studio NuGet:为什么不执行依赖程序包的.targets文件?

  20. 20

    是否有任何NuGet API可以从Visual Studio Extension项目创建程序包

  21. 21

    Visual Studio的Nuget程序包对话框中使用哪种类型的ItemsControl?

  22. 22

    如何在Visual Studio Team Services中发布和访问nuget程序包

  23. 23

    从Visual Studio NuGet管理器安装MailChimp.NET程序包

  24. 24

    在Visual Studio中更新解决方案级别的nuget软件包

  25. 25

    在Visual Studio中安装Xamarin.Forms Nuget软件包时出错

  26. 26

    如何在Mac的Visual Studio Code中查看NuGet包实现源?

  27. 27

    Visual Studio MonoGame NuGet软件包中不再包含MonoGame管道工具吗?

  28. 28

    如何将 Nuget 包添加到我的 Visual Studio 扩展中的项目?

  29. 29

    从Visual Studio构建NuGet软件包

热门标签

归档