Как остановить Visual Studio от копирования вторичных ссылок? - PullRequest
0 голосов
/ 01 ноября 2018

Я использую Visual Studio 2015.

У меня есть проект служебной библиотеки, который ссылается на ряд сторонних сборок, которые все зарегистрированы в GAC. В этом проекте все зависимости, которые зарегистрированы в GAC, являются ссылками с копией local, установленной в false. Когда я собираю эти проекты, сборки GAC не копируются в каталог сборки.

Затем на служебный проект ссылается, как на проект, другой проект, для параметра "copy local" установлено значение true. Затем ссылается на сборку проекта, все сборки GAC, на которые ссылается служебный проект, копируются в каталог сборки. Эти сборки довольно велики, и это действительно замедляет сборку и увеличивает размер каталога сборки.

Visual Studio 2013 этого не делал. Вторичные ссылки, которые были зарегистрированы в GAC, не были скопированы. Следует также отметить, что в Visual Studio 2015 вторичные ссылки также копируются, если я ссылаюсь на проект утилиты как файл, а не как проект. Есть ли способ остановить его от копирования вторичных зависимостей?

Вот раздел подробного вывода из MSBuild для одной из вторичных ссылок, которая копируется: 4> Dependency "ESRI.ArcGIS.Catalog, Version=10.5.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86". 4> Resolved file path is "C:\Program Files (x86)\ArcGIS\DeveloperKit10.5\DotNet\ESRI.ArcGIS.Catalog.dll". 4> Reference found at search path location "{Registry:Software\Microsoft.NETFramework,v4.7.2,AssemblyFoldersEx}". 4> For SearchPath "C:...\bin\Release". 4> Considered "C:...\bin\Release\ESRI.ArcGIS.Catalog.winmd", but it didn't exist. 4> Considered "C:...\bin\Release\ESRI.ArcGIS.Catalog.dll", but it didn't exist. 4> Considered "C:...\bin\Release\ESRI.ArcGIS.Catalog.exe", but it didn't exist. 4> For SearchPath "{TargetFrameworkDirectory}". 4> Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\ESRI.ArcGIS.Catalog.winmd", but it didn't exist. 4> Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\ESRI.ArcGIS.Catalog.dll", but it didn't exist. 4> Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\ESRI.ArcGIS.Catalog.exe", but it didn't exist. 4> Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\Facades\ESRI.ArcGIS.Catalog.winmd", but it didn't exist. 4> Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\Facades\ESRI.ArcGIS.Catalog.dll", but it didn't exist. 4> Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\Facades\ESRI.ArcGIS.Catalog.exe", but it didn't exist. 4> For SearchPath "{Registry:Software\Microsoft.NETFramework,v4.7.2,AssemblyFoldersEx}". 4> Considered AssemblyFoldersEx locations. 4> Required by "C:...\bin\Release\ArcBase.dll". 4> Found related file "C:\Program Files (x86)\ArcGIS\DeveloperKit10.5\DotNet\ESRI.ArcGIS.Catalog.xml". 4> The ImageRuntimeVersion for this reference is "v4.0.30319".

1 Ответ

0 голосов
/ 02 ноября 2018

Как остановить Visual Studio от копирования вторичных ссылок?

AFAIK, Copy Local = False должно быть достаточно, чтобы предотвратить копирование сторонних сборок в каталог сборки другого проекта. Что, в свою очередь, не позволяет msbuild найти эти сборки GAC при сборке другого проекта. И его вообще не следует искать, поскольку сборки GAC больше не должны появляться в манифесте другого проекта. Больше чем одна вещь пошла не так, как надо здесь. Чтобы отследить эту проблему, вы должны изменить выходной журнал MSBuild на Подробный, чтобы узнать, как ему все равно удалось его найти.

Измените MSBuild на подробный:

Под Tools -> Options -> Projects and Solutions -> Build and Run -> MSBuild project build output verbosity, измените многословность выходных данных сборки проекта MSBuild на Подробно или Диагностика .

Кроме того, в качестве обходного пути вы можете установить эти сторонние сборки в пакет nuget, а не устанавливать их в GAC, а затем добавить этот пакет nuget в другой проект, построить проект, эти сторонние сборки не будут копироваться в папка bin другого проекта.

Создание пакета nuget из dll

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...