【问题标题】:csproj file settings for several build projects多个构建项目的 csproj 文件设置
【发布时间】:2023-06-22 18:01:01
【问题描述】:

我有这个解决方案结构:

Solution.sln
  |--WebUI.csproj (has Core.csproj as dependency)
  |--Core.csproj
  |--Tests
      |--UnitTests
          |--WebUI.UnitTest.csproj (has Core.csproj and WebUI.csproj as dependencies)
          |--Core.UnitTest.csproj (has Core.csproj as dependency) 

我应该向 WebUI.csproj 添加什么来一起构建 WebUI.UnitTest.csproj 和 Core.UnitTest.csproj? (在我的 WebUI\bin 文件夹中,我需要这些库:WebUI.UnitTest.dll 和 Core.UnitTest.dll)。

谢谢!

【问题讨论】:

  • 如果您构建解决方案,WebUI.UnitTest.csproj 和 Core.UnitTest.csproj 应该已经构建好了。为什么您希望它们从 WebUI.csproj 中构建? (如果这是你想要的,我不确定我是否理解这个问题)

标签: visual-studio msbuild csproj


【解决方案1】:

直接的方法是添加WebUI.UnitTest 项目和Core.UnitTest 项目作为WebUI 项目的依赖项。但是 WebUI.UnitTest 项目已经有 WebUI.csproj 作为依赖项,这种方法在您的解决方案结构中不起作用。如果您只想在 WebUI\bin 文件夹中包含 WebUI.UnitTest.dll 和 Core.UnitTest.dll,您可以在 WebUI.csproj 中添加一个任务以将这些文件复制到该文件夹​​中:

<Target Name="AfterBuild">

<PropertyGroup>  
  <SolutionDir>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))</SolutionDir>
</PropertyGroup>

<Exec Command="&quot;$(MSBuildBinPath)\MSBuild.exe&quot; &quot;$(SolutionDir)\WebUI.UnitTest\WebUI.UnitTest.csproj&quot;" />
<Exec Command="&quot;$(MSBuildBinPath)\MSBuild.exe&quot; &quot;$(SolutionDir)\Core.UnitTest\Core.UnitTest.csproj&quot;" />

<PropertyGroup> 
  <CopyFileOutput>$(SolutionDir)\WebUI.UnitTest\bin\Debug\WebUI.UnitTest.dll;$(SolutionDir)\Core.UnitTest\bin\Debug\Core.UnitTest.dll</CopyFileOutput>
</PropertyGroup>



<Copy  
  SourceFiles="$(CopyFileOutput)"  
  DestinationFolder="$(SolutionDir)\WebUI\bin"  
/>  

请注意:stijn 的评论是正确的,您构建了解决方案,WebUI.UnitTest.csproj 和 Core.UnitTest.csproj 应该已经构建好了。

我还在 WebUI.csproj 中添加了 WebUI.UnitTest.csproj 和 Core.UnitTest.csproj 的构建步骤,因此您只需要构建 WebUI.csproj。

【讨论】: