Проект веб-сайта Asp.net с таргетингом 4.7.2 не может разрешить ссылку .netstandard 2.0 с помощью MSBuild - PullRequest
2 голосов
/ 29 апреля 2019

У меня есть веб-сайт .net 4.0 asp.net (старые, без .csproj).Это относится к библиотеке классов .net framework 4.0 (Shared Library A).

Я добавил новый проект API ядра .net в решение.Этот проект также должен поговорить с Shared Library A.

Решение (я думал) состояло в том, чтобы переместить библиотеку классов в .net стандарт 2.0, а затем переместить веб-сайт на 4.7.2, что позволило бы ему ссылаться наПроект стандарта .net 2.0.

Для этого я изменил веб-конфигурацию для веб-сайта таким образом:

 <compilation debug="true" targetFramework="4.7.2">
 <httpRuntime maxRequestLength="10000" executionTimeout="1000" requestValidationMode="2.0" targetFramework="4.7.2"/>

Это все работает в Visual Studio.Решение строится, веб-сайт запускается и код в библиотеках .netstandard2.0 функционирует должным образом и является отлаживаемым.Я знаю, что Visual Studio делает некоторые вещи по-другому с MSBuild.exe.

Проблема в том, что наш CI-сервер не может построить решение, а также не может «MSBuild.exe» локально.

Команда Iя работаю:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe" "[Path to Solution]\AT3.sln"

Затем я получаю сообщение об ошибке:

 warning MSB3268: The primary reference "C:\Work\AT3\at3\wrld\AT3.Common.Utilit ies\bin\Debug\netstandard2.0\AT3.Application.Utilities.dll" could not be resolved because it has an indirect depende ncy on the framework assembly "netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" which  could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.7.2". To resolve this problem,  either remove the reference "C:\Work\AT3\at3\wrld\AT3.Common.Utilities\bin\Debug\netstandard2.0\AT3.Application.Uti lities.dll" or retarget your application to a framework version which contains "netstandard, Version=2.0.0.0, Cultur e=neutral, PublicKeyToken=cc7b13ffcd2ddd51"

Чтобы попытаться решить эту проблему, я добавил следующую строку в раздел моего web.config:

 <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/>

Мой вопрос: как я могу получить этот проект .netstandard2.0 для разрешения с помощью MSBuild.exe?Может ли веб-сайт на самом деле быть "4.7.2" и успешно ссылаться на стандарт .net, или визуальная студия лжет мне, говоря, что может?

Примечания: я знаю, что нам нужно перенести веб-сайт в веб-проект.Я просто надеюсь, что это не единственное решение этой проблемы, так как это немного монолитный сайт.Наш план состоит в том, чтобы начать медленную миграцию кода из App_Code в библиотеки .netstandard2.0.

Спасибо заранее.

1 Ответ

1 голос
/ 19 июня 2019

Я только что узнал от своего коллеги.

Вы можете попробовать добавить ссылку в файл csproj библиотеки .Net Standard, как показано ниже.Это работает для меня.

<Reference Include="netstandard">
  <Private>True</Private>
</Reference>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...