Как заменить файлы при сборке csproj - PullRequest
0 голосов
/ 03 августа 2020

Ситуация

У меня есть такое дерево решений:

Solution\
|- Solution.sln
|- Proj1\
|  |- Proj1.csproj
|  |- File.cs
|  |- (other *.cs Proj1 files)
|- Proj2\
|  |- Proj2.csproj
|  |- (all *.cs Proj2 files)
|- Fake\
|  |- File.cs
|- (other files or directories)

Когда я создаю решение или проект, файлы компиляции Proj1 будут Proj1 \ File.cs , Proj1 \ *. Cs (другие). Как я могу собрать его так, чтобы файлы Proj1 были Fake \ File.cs , Proj1 \ *. Cs (другие).

Мое решение проблемы

Я сейчас попытался изменить Proj1.csproj вот так:

...
<ItemGroup Condition="'$(FakeDir)'!=''">
    <Compile Remove="File.cs" />
    <Compile Include="$(FakeDir)\File.cs" />
</ItemGroup>
...

Объясните: проект удалить оригинал File.cs и заменить это с Fake \ File.cs , когда я создаю проект со свойством FakeDir следующим образом: msbuild Proj1.csproj -p:FakeDir=..\Fake\

Но это решение не очень хорошее, потому что вам нужно изменить .csproj и соберите только один проект вместо сборки решения.

Замечания

  1. .csproj можно записать в старом или новом формате SKD.
  2. msbuild может быть из BuildTools или из do tnet SDK (dotnet build, dotnet msbuild)

Я думаю, что эти факты не имеют значения, но я могу преобразовать .csproj в новый формат и использовать только do tnet CLI SDK.

Проблема

Как я могу построить решение с заменой некоторых файлов в определенных c проектах без изменений в * .csproj?

...