Целевые .NET 4.x и .NET Standard 2.0 - PullRequest
0 голосов
/ 29 августа 2018

В прошлом году я добавил поддержку .NET Standard 2.0 в Сетевую библиотеку . Я добился этого, создав второй (.NET Standard) проект, и в основном скопировал + вставил исходный код. С некоторыми изменениями он был готов к работе.

Но так как я добавляю функции по требованию, то очень сложно менять одно и то же в обоих проектах. Было бы здорово просто создать одну кодовую базу и просто изменить цель компиляции.

Операторы прекомпиляции не являются опцией, потому что версия .NET 4.x дополнительно включает некоторые пакеты NuGet, которые недоступны для .NET Standard.

Решение, о котором я могу сейчас подумать, состоит в создании общей библиотеки, включающей все межпроектные классы. Или есть более гладкое решение?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете добавить исходные файлы из существующего проекта в другой проект в виде ссылки.

project a
   somefile.cs

project b

Щелкните правой кнопкой мыши по проекту b, добавьте существующий элемент ... перейдите к файлу somefile.cs в проекте a, а затем добавьте enter image description here

Вы можете редактировать файл из любого проекта ... так что будьте осторожны.

0 голосов
/ 29 августа 2018

Решил проблему с предложенным решением. .Csproj выглядит следующим образом

<Project Sdk="Microsoft.NET.Sdk">  
  <PropertyGroup>
    <TargetFrameworks>net46;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
  <PropertyGroup>
     <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  </PropertyGroup>
  <ItemGroup>
    <Compile Remove="packages\**" />
    <EmbeddedResource Remove="packages\**" />
    <None Remove="packages\**" />
  </ItemGroup>

  <ItemGroup>
    <!-- PackageReferences for all TargetFrameworks -->
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net46' ">
    <!-- PackageReferences for net46 TargetFramework -->
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' ">
    <!-- PackageReferences for standard2.0 TargetFramework -->
  </ItemGroup>
</Project>

Единственная проблема на данный момент: я не могу использовать Менеджер пакетов NuGet. Я должен добавить каждую запись вручную в правильную группу товаров.

РЕДАКТИРОВАТЬ: ручное редактирование требуется только в том случае, если пакеты не поддерживаются обеими TargetFrameworks. Просто измените в настройках -> NuGet-Paket-Manager -> Формат по умолчанию -> PackageReference

enter image description here

...