Можно ли совместно использовать `Directory.Build.props` между проектами Net Full и Net Standard в одной папке? - PullRequest
0 голосов
/ 08 марта 2019

Я создал сборку проекта .NET 4.0 в папке, а также создал файл проекта .NET Standard в той же папке (для совместного использования тех же файлов .cs). Он отлично работает, пока я не добавлю Directory.Build.props файл, и в этот момент я получаю эту ошибку только для проекта .NET 4.0:

Ваш проект не ссылается на ".NETFramework, Version = v4.0" фреймворк. Добавьте ссылку на «.NETFramework, Version = v4.0» в Свойство «TargetFrameworks» вашего файла проекта, а затем перезапустите NuGet восстановление.

Я пробовал файл только с элементом проекта:

<?xml version="1.0" encoding="utf-8"?>
<Project>
</Project>

также

<Project Condition='$(MSBuildProjectName.Contains("-Standard"))'>

Я получаю ту же ошибку.

Я уже знаю, что одним из решений является создание общего проекта и включение файлов таким образом или добавление связанных файлов, но я хотел посмотреть, могу ли я использовать Directory.Build.props ТОЛЬКО для проектов .Net Standard в той же папке, чтобы изменить некоторые чистые стандартные конфигурации ТОЛЬКО. Если нет, то мне придется разделить проекты на отдельные папки (это был всего лишь эксперимент, чтобы увидеть, возможно ли это).

Причина Directory.Build.props для проекта Net Standard заключается в том, что я не могу использовать файл .csproj для изменения выходных каталогов без ошибок.

1 Ответ

0 голосов
/ 08 марта 2019

Видимо, это работает. Я закрыл Visual Studio, удалил все папки obj и bin, включая папку .vs в родительском каталоге, затем перезапустил Visual Studio. Я добавил это в файл Directory.Build.props, чтобы он работал только для проектов NET Standard с -Standard в имени:

<?xml version="1.0" encoding="utf-8"?>
<Project>
  <PropertyGroup Condition='$(MSBuildProjectName.Contains("-Standard"))'>
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)\obj_std\</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>

Примечание: Если вы используете это, вам придется изменить -Standard на любой суффикс, который вы добавите в свои проекты .Net Standard, или иным образом выработать новое условие. .

Я выяснил причину сбоя, потому что этот файл:

obj\project.assets.json

Он создается, когда .Net Core собирается в одном каталоге. Должно быть, он остался там до того, как я изменил имя каталога obj.

После дополнительных исследований я обнаружил, что пост, похоже, делает то же самое, что я только что сделал выше (я понял это самостоятельно, прежде чем нашел страницу ниже): https://github.com/NuGet/Home/issues/5126#issuecomment-297457667

...