Перенаправление привязки сборки из библиотеки классов - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть проект GitHub ( Test Automation Essentials ), который ссылается на некоторые специфические сборки Visual Studio (Microsoft.VisualStudio.TestTools.UITest.Extension, который является частью CodedUI; но это не важно для вопроса). Этот проект опубликован в виде пакета NuGet, содержащего мою библиотеку классов.

Я хочу, чтобы мой проект поддерживал разные версии Visual Studio, и в целом эта сборка не имеет заметных различий между версиями Visual Studio, поэтому я не ожидаю каких-либо проблем совместимости (она должна быть обратно совместимой) тем не мение).

Однако, если я компилирую свой проект в одной версии Visual Studio (например, 2015), когда я пытаюсь ссылаться на пакет NuGet из проекта в более новой версии Visual Studio (например, 2017), когда запускается хост-проект, я получите следующее исключение:

System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.TestTools.UITest.Extension, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file 

Примечание: моя библиотека ссылается на эту сборку с Specific Version=False.

Я обнаружил, что могу обойти эту проблему, добавив следующий элемент в app.config приложения:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.VisualStudio.TestTools.UITest.Extension" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="12.0.0.0-15.0.0.0"  newVersion="15.0.0.0"/>
  </dependentAssembly>

Примечание: в данном конкретном случае исполняемый файл обычно QTAgent32_40.exe, который сам является частью Visual Studio, поэтому мне пришлось добавить элемент в QTAgent32_40.exe.config, а не фактически в файл app.config проекта. QTAgent32_40.exe.config уже имеет много подобных dependentAssembly элементов, но по какой-то причине не для этой конкретной сборки.

Вопрос:

Я не хочу, чтобы мои клиенты сами добавляли этот параметр. Я был бы рад, если бы у меня была такая настройка, специфичная для моей библиотеки классов , чтобы любой, кто ссылается на мою библиотеку, автоматически получал этот параметр Assembly Redirect. Однако я не нашел способа сделать это ...

Кто-нибудь знает, как мне это сделать?

1 Ответ

0 голосов
/ 26 апреля 2018

Единственный способ сделать это - создать пакет Nuget для каждой конкретной версии Visual Studio.

...