Создание гибридного решения .Net Standard и .NetFramework в MSBuild. - PullRequest
0 голосов
/ 30 января 2019

Простите за длинный пост.Я пытаюсь дать как можно больше информации.

Я переместил некоторые классы из библиотеки .Net Framework в новую библиотеку .Net Standard , чтобы ссылаться на них из существующих .Net Framework проектов и новые .Net Core проекты.После добавления нового стандартного проекта .net в решение, содержащее другие проекты .Net Framework, существующее определение сборки (XAML) не может создать стандартный проект .net.Он прекрасно работает, если я передаю / t: restore, build как параметры MSBuild, но это нарушает сборку для существующих .NET Framework проектов в решении.Visual Studio прекрасно умеет создавать гибридные решения.Мне нужно встроить его в это гибридное решение, потому что нижестоящий проект выполняет упаковку и отправку в наш репозиторий nuget (OctopusDeploy).

Чтобы преодолеть это, я попытался использовать цели по умолчанию и исходные цели, но не смог получитьчтобы пройти.

См. пример проекта ниже:

    <Project InitialTargets="restore" DefaultTargets="publish" Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <RootNamespace>MyCompany.Common</RootNamespace>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AssemblyName>MyCompany.CommonStandard</AssemblyName>
  </PropertyGroup>

</Project>

С файлом вышеуказанного проекта я получаю эту ошибку.C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ CommonExtensions \ Microsoft \ NuGet \ NuGet.targets (240): существует круговая зависимость в целевом графе зависимостей, включающая целевой объект "_FilterRestoreGraphProjectInputItems"


Другие вещи, которые я пробовал:

<Project DefaultTargets="restore;build;publish"  Sdk="Microsoft.NET.Sdk">

ИЛИ

<Project DefaultTargets="restore;publish"  Sdk="Microsoft.NET.Sdk">

Ошибка: Куча ошибок, указывающих, что почти все не определено.(vbc: тип 'System.String' не определен.) Примечание. Передача совпадает с целями msbuild, такими как / t: восстановление, сборка, публикация работ.


<Project Targets="restore,build,publish"  Sdk="Microsoft.NET.Sdk">

ИЛИ

<Project DefaultTargets="publish"  Sdk="Microsoft.NET.Sdk">

ИЛИ

 <Project DefaultTargets="publish"  Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
  <BuildDependsOn>
   Restore;
   $(BuildDependsOn);
  </BuildDependsOn>
</PropertyGroup>

Ошибка: \ obj \ project.assets.json 'не найден.Запустите восстановление пакета NuGet, чтобы сгенерировать этот файл.


<Project InitialTargets="restore"  Targets="build,publish"  Sdk="Microsoft.NET.Sdk">

ИЛИ

<Project InitialTargets="restore"  Targets="publish"  Sdk="Microsoft.NET.Sdk">

Ошибка: В целевом графе зависимостей существует циклическая зависимостьс участием цели "_FilterRestoreGraphProjectInputItems".


Спасибо за чтение.Буду очень признателен за любые рекомендации по решению этой проблемы.

1 Ответ

0 голосов
/ 04 февраля 2019

Оказалось, что мои определения сборки указывали на более старую версию MSBuild, которая не распознала формат sdk.После того, как я изменил это на MSBuild15 и использовал цели восстановления и сборки, я смог заставить их работать.

...