Ссылочная библиотека не скопирована - PullRequest
7 голосов
/ 05 сентября 2011

У меня есть ProjectA (WPFApplication) , который ссылается на ProjectB (ClassLibrary) .Внутри ProjectB у меня есть окно wpf, которое использует управление из ThirdParty.dll , на которое я соответственно ссылаюсь из ProjectB .

Проблема в том, что он не ThirdParty.dll не найден в выходной папке ProjectA , и исключение времени выполнения синтаксического анализа xaml повышено.В GAC нет ThirdParty.dll .Копировать локально имеет значение true.Это работает, если я вручную добавляю в выходную папку ProjectA эту библиотеку, и это также работает, если я использую ThirdParty.dll где-то прямо в моих файлах CS.

Какя могу решить это?

Ответы [ 3 ]

5 голосов
/ 05 сентября 2011

Причина этого заключается в том, что Visual Studio копирует ресурсы в выходную папку только в том случае, если задан параметр Копировать локально. Просто установите ссылку на Copy Local, и все будет в порядке.

Проверьте эту ссылку о том, как это работает.

Когда вы ссылаетесь на ProjectA, ссылки из ProjectB автоматически не ссылаются. Чтобы это работало, вам нужно добавить ссылку на ThirdParty.dll из ProjectA, если вы используете ее только в XAML. Компилятор не копирует ссылки, которые используются только в XAML. Но если вы используете их в коде, они копируются.

Это та же проблема, что и обсуждаемая здесь

1 голос
/ 05 сентября 2011

Вы должны добавить ссылку на dll третьей стороны в проект, где вы хотите, чтобы он появился в выходном каталоге.Если для параметра Копировать локально задано значение true, он появится в каталоге bin, независимо от того, используете вы его в коде или в xaml.

0 голосов
/ 28 ноября 2013

Добавьте что-то подобное в 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>.

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