Ссылочная библиотека не копируется
У меня есть ProjectA(WPFApplication), которая ссылается на ProjectB (ClassLibrary). Внутри ProjectB у меня есть окно wpf, которое использует управление от ThirdParty.dll, на которое я соответственно ссылаюсь из ProjectB.
Проблема в том, что он не находит ThirdParty.dll в выходной папке ProjectA, и повышается время выполнения синтаксического анализа xaml. В GAC нет ThirdParty.dll. Копировать локально имеет значение true. Это работает, если я вручную добавляю в выходную папку ProjectA эту библиотеку, и это также работает, если я использую этот файл ThirdParty.dll где-то прямо в моих файлах cs.
Как я могу решить это?
3 ответа
Причина этого заключается в том, что Visual Studio копирует ресурсы в выходную папку только в том случае, если задан параметр Копировать локально Просто установите ссылку на Copy Local, и все будет в порядке.
Проверьте эту ссылку о том, как это работает.
Когда вы ссылаетесь на ProjectA, на ссылки из ProjectB автоматически не ссылаются. Чтобы это работало, вам нужно добавить ссылку на ThirdParty.dll из ProjectA, если вы используете ее только в XAML. Компилятор не копирует ссылки, которые используются только в XAML. Но если вы используете их в коде, они копируются.
Это та же проблема, что обсуждалась здесь
Вы должны добавить ссылку на dll третьей стороны в проект, где вы хотите, чтобы он появился в выходном каталоге. Если для параметра Копировать локально задано значение true, он появится в каталоге bin, независимо от того, используете ли вы его в коде или в xaml.
Добавьте что-то вроде этого в ProjectB.csproj:
<ItemGroup>
<Content Include="...\path\ThirdParty.dll">
<Link>ThirdParty.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Это убеждает VS скопировать ThirdParty.dll и в выходную папку ProjectA(нет необходимости добавлять что-либо в ProjectA относительно ThirdParty.dll).
Я все еще нахожу его неадекватным, потому что если ThirdParty.dll находится в пакете NuGet, его путь обычно содержит номер версии, который изменится при обновлении пакета.
Я еще не пробовал, но не ожидаю, что NuGet обновит путь здесь, как это происходит в <Reference>
,