Visual studio 2015 如何阻止Visual Studio复制辅助引用?

Visual studio 2015 如何阻止Visual Studio复制辅助引用?,visual-studio-2015,msbuild,dependencies,Visual Studio 2015,Msbuild,Dependencies,我正在运行Visual Studio 2015 我有一个实用程序库项目,它引用了许多第三方程序集,这些程序集都在GAC中注册。在该项目中,在GAC中注册的所有依赖项都是copy local设置为false的引用。构建该项目时,GAC程序集不会复制到构建目录 然后,该实用程序项目作为一个项目被另一个项目引用,并且“copy local”设置为true。然后,引用项目生成,该实用程序项目引用的所有GAC程序集都复制到生成目录。这些程序集相当大,它确实会减慢构建速度并使构建目录膨胀 Visual St

我正在运行Visual Studio 2015

我有一个实用程序库项目,它引用了许多第三方程序集,这些程序集都在GAC中注册。在该项目中,在GAC中注册的所有依赖项都是copy local设置为false的引用。构建该项目时,GAC程序集不会复制到构建目录

然后,该实用程序项目作为一个项目被另一个项目引用,并且“copy local”设置为true。然后,引用项目生成,该实用程序项目引用的所有GAC程序集都复制到生成目录。这些程序集相当大,它确实会减慢构建速度并使构建目录膨胀

Visual Studio 2013没有这样做。未复制在GAC中注册的辅助引用。我还应该注意,在Visual Studio 2015中,如果我将实用程序项目作为文件而不是项目引用,则也会复制辅助引用。有没有办法阻止它复制辅助依赖项

以下是正在被复制的一个辅助引用的MSBuild详细输出的一部分:

4>依赖项“ESRI.ArcGIS.Catalog,版本=10.5.0.0,区域性=中性,PublicKeyToken=8fc3cc631e44ad86”。
4> 解析的文件路径为“C:\ProgramFiles(x86)\ArcGIS\DeveloperKit10.5\DotNet\ESRI.ArcGIS.Catalog.dll”。
4> 在搜索路径位置{Registry:Software\Microsoft\.NETFramework,v4.7.2,AssemblyFoldersEx}找到引用。
4> 对于搜索路径“C:\…\bin\Release”。
4> 考虑了“C:\…\bin\Release\ESRI.ArcGIS.Catalog.winmd”,但它不存在。
4> 考虑了“C:\…\bin\Release\ESRI.ArcGIS.Catalog.dll”,但它不存在。
4> 考虑了“C:\…\bin\Release\ESRI.ArcGIS.Catalog.exe”,但它不存在。
4> 对于搜索路径“{TargetFrameworkDirectory}”。
4> 考虑了“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.7.2\ESRI.ArcGIS.Catalog.winmd”,但它不存在。
4> 考虑了“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.7.2\ESRI.ArcGIS.Catalog.dll”,但它不存在。
4> 考虑了“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.7.2\ESRI.ArcGIS.Catalog.exe”,但它不存在。
4> 考虑了“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.7.2\Facades\ESRI.ArcGIS.Catalog.winmd”,但它不存在。
4> 考虑了“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.7.2\Facades\ESRI.ArcGIS.Catalog.dll”,但它不存在。
4> 考虑了“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.7.2\Facades\ESRI.ArcGIS.Catalog.exe”,但它不存在。
4> 对于搜索路径“{Registry:Software\Microsoft\.NETFramework,v4.7.2,AssemblyFoldersEx}”。
4> 已考虑组装FolderSex位置。
4> “C:\…\bin\Release\ArcBase.dll”所需。
4> 找到相关文件“C:\Program Files(x86)\ArcGIS\DeveloperKit10.5\DotNet\ESRI.ArcGIS.Catalog.xml”。
4> 此参考的ImageRuntimeVersion为“v4.0.30319”。
如何阻止Visual Studio复制辅助引用

好吧,
Copy Local=False
本身应该足以防止这些第三方程序集被复制到另一个项目生成目录。这反过来会阻止msbuild在生成另一个项目时查找这些GAC程序集。而且它根本不应该寻找它,因为GAC程序集不应该再出现在另一个项目的清单中。这里出了不止一件事。要跟踪此问题,您应该将MSBuild输出日志更改为Detailed,以了解它是如何找到它的

将MSBuild更改为详细:

工具
–>
选项
–>
项目和解决方案
–>
生成并运行
->
MSBuild项目生成输出详细度
,将MSBuild项目生成输出详细度更改为详细诊断

此外,作为一种解决方法,您可以将这些第三方程序集设置到nuget包中,而不是将它们设置到GAC中,然后将此nuget包添加到另一个项目中,生成该项目,这些第三方程序集不会复制到另一个项目的bin文件夹中


希望这有帮助。

我最终解决了这个问题。解决方案是将此部分添加到二级库项目的.csproj文件中:

<Project... >
    <PropertyGroup>
        <DoNotCopyLocalIfInGac>true</DoNotCopyLocalIfInGac>
    </PropertyGroup>

真的

此问题是否有更新?你解决这个问题了吗?如果没有,请告诉我有关此问题的最新信息。我尚未解决此问题。我确实将MS Build输出更改为Detailed,这产生了一些有趣的见解。例如,并不是实用程序库引用的每个程序集都被复制到引用项目生成目录中,但大多数程序集都被复制到引用项目生成目录中。已复制和未复制的MSBuild输出看起来相同。似乎在GAC中找不到程序集,但注册表:…AssemblyFoldersEx。我添加了一个第二次引用的输出摘录,该引用将被复制到问题中。