Проект MsBuild наследует свойства в библиотеке классов из родительского проекта.C#

Место общения программистов C#
Ответить
Anonymous
 Проект MsBuild наследует свойства в библиотеке классов из родительского проекта.

Сообщение Anonymous »

У меня есть такая структура решения:

Код: Выделить всё

/SolutionFolder
/SolutionFolder/Project1
/SolutionFolder/Project1/Project1.csproj
/SolutionFolder/Project2
/SolutionFolder/Project2/Project2.csproj
/SolutionFolder/ClassLib1
/SolutionFolder/ClassLib1/ClassLib1.csproj
Project1 и Project2 - это два разных приложения, в которых используется ClassLib1. p>
Например:

Код: Выделить всё

#if Foo
// do something
#elif Bar
// do something else
#endif
Если мы создаем Project1, мы хотим, чтобы был определен Foo, если создаем Project2, мы хотим, чтобы был определен Bar.
На самом деле у нас есть работающий решение, определив Driectory.Build.props внутри нашей папки решения, которая выглядит следующим образом:

Код: Выделить всё

/SolutionFolder/Directory.Build.props
_ И внутри нашей библиотеки классов csproj у нас есть эта строка в основном блоке группы свойств.

Код: Выделить всё


net8.0
enable
enable
$(DefineConstants);$(CustomConstant)

Он делает то, что мы хотим, но имеет огромный недостаток: когда мы хотим построить Project1 или Project2, нам нужно вручную отредактировать Directory.Build.props, указав правильное значение, чтобы получить наш библиотека классов имеет правильное поведение.
Цель состоит в том, чтобы эта константа была определена внутри родительского проекта и унаследована библиотекой классов. Но я ничего не пробовал, все работает.
ClassLib1 не видит никаких свойств, определенных в родительском проекте.
Добавление свойства в ProjectReference тоже не работает:< /p> Наиболее многообещающий способ сделать это — определить Directory.Build.props непосредственно внутри каждого родительского проекта и скопировать файл реквизита в папку библиотеки классов перед каждой сборкой:< /p> Но даже при использовании BeforeTargets="ResolveReferences" цель копирования проекта выполняется ПОСЛЕ сборки ClassLib1, что требует двух последовательных сборок, чтобы библиотека классов принимала правильный Directory.Build.props в аккаунт.
У кого-нибудь есть идеи? Я потратил много времени на поиски решения, похоже, никому не придется делать что-то подобное, даже если мне кажется, что это довольно распространенный сценарий!

Подробнее здесь: https://stackoverflow.com/questions/791 ... nt-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»