C# Загадка ссылки на проект - PullRequest
0 голосов
/ 09 мая 2020

Вечер всего; Мне дали задание подготовить нашу кодовую базу для перехода на git. В рамках этих приготовлений я удалил избыточный код и заменил ссылки на зарегистрированные библиотеки DLL ссылкой на ту же DLL, предоставленную внутренним пакетом Nuget.

Я обновил ссылку на проект и Единственное, что изменилось, это путь подсказки, но я получаю странную ошибку при создании и даже более странную информацию во время расследования!

Итак, пожалуйста, пристегните себя к некоторым странностям. в вопросе (я укажу здесь, что это ЕДИНСТВЕННАЯ проблема с решением проекта 475; каждый .csproj был обновлен, чтобы указывать на новое местоположение)

Вот исходная ссылка

<Reference Include="Microsoft.SqlServer.SQLTask, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\Microsoft.SqlServer.SQLTask.dll</HintPath>
  <Private>True</Private>
</Reference>

и теперь обновленная ссылка

<Reference Include="Microsoft.SqlServer.SQLTask, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\packages\MyCompany.Client.Winforms.ThirdPartyLibraries.5.0.0\lib\net472\Microsoft.SqlServer.SQLTask.dll</HintPath>
  <Private>True</Private>
</Reference>

это должно быть достаточно очевидным, но чтобы констатировать очевидное; только путь к DLL изменился между двумя ссылками.

Теперь проблема. MSBuild показывает следующую ошибку:

MSBUILD Error CS8012

Как видите, проблема в том, что, по-видимому, MSBUILD думает, что я ссылаюсь на версию 14.0.0.0? Но ждать; это не то, что показано в моем справочном разделе выше ...

В Visual Studio! в частности свойства этой ссылки.

Assembly Reference Properties Window

Хорошо, поэтому может показаться, что как MSBUILD (сборка из командного файла, который мы используем), так и VS имеют для почему-то оба завелись разрешением от GA C. Итак, теперь вопрос в том, почему.

Я, очевидно, понимаю, что указанный флаг c версии - это то, почему это разрешено, но не почему это происходит.

Сборка находится в правильном месте ; Мне пришлось очистить часть пути, но вы можете предположить, что он правильно совпадает со ссылкой (файлы .csproj были обновлены с помощью сценария; были обновлены 1000 ссылок, поэтому я уверен, что путь ТОЧНО совпадает)

enter image description here

Я подумал, что, возможно, с моей стороны произошла ошибка при упаковке нашей старой папки \ lib в пакет Nuget, но DLL, восстановленная в расположение папки пакетов, идентичен исходной DLL. Вот некоторые доказательства, подтверждающие это утверждение.

Вот DotPeek сборки; он показывает имя, версию и архитектуру, которые все соответствуют ссылке.

DotPeek showing a Dot Net Assembly

Вот результат sn.exe (строгое имя), показывающий publi c токен ключа; который также соответствует ссылке.

enter image description here

Я в растерянности, и любая помощь или идеи будут приветствоваться на этом этапе.

1 Ответ

0 голосов
/ 09 мая 2020

Итак, сборка была заблокирована windows, когда она была изначально загружена на мою машину.

enter image description here

Нажатие кнопки разблокировки вызвало проблема до go прочь! Также удаление папки пакетов и разрешение Nuget извлекать пакет также устранило эту проблему (я поместил пакет в эту папку вручную после того, как создал его; до того, как я отправил его в наш канал)

...