Ситуация
У меня есть такое дерево решений:
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 и соберите только один проект вместо сборки решения.
Замечания
- .csproj можно записать в старом или новом формате SKD.
- msbuild может быть из BuildTools или из do tnet SDK (
dotnet build
, dotnet msbuild
)
Я думаю, что эти факты не имеют значения, но я могу преобразовать .csproj в новый формат и использовать только do tnet CLI SDK.
Проблема
Как я могу построить решение с заменой некоторых файлов в определенных c проектах без изменений в * .csproj?