在Visual Studio(目前在VS 2019中运行)中,有一个丰富的构建宏集合,我可以在C++项目中使用它们,让我根据所选择的配置控制编译文件存储在哪个文件夹中。因此,我可以为每个客户提供单独的配置。默认情况下,输出文件夹由$(SolutionDir)$(Configuration)提供。因此,我的CAPS项目可以将Release阿尔戈马项目的输出存储在CAPS/Release Algoma中,而US Steel的构建可以将其文件存储在CAPS/Release US Steel中。当我添加客户配置时,我不必更改任何内容,我的文件会自动存储在我想要的位置。
在C#中,我没有那些构建宏。如果向解决方案中添加新配置,我必须进入解决方案中的每个项目并更改输出文件夹。我是否有那些可用于C#项目的构建宏,或者是否有其他方法可以根据配置控制输出文件夹?
4条答案
按热度按时间mjqavswn1#
通过设置
$(OutputPath)
变量,可以在项目文件或其他MSBuild目标文件中指定输出目录。您可以有条件地执行此操作:
或者在很多情况下直接使用其他变量来构建值
请注意,
$(SolutionDir)
仅在IDE中构建时定义(根据文档),因此另一种方法可能是将Directory.Build.props放在解决方案文件夹或存储库根目录中,以定义输出目录的基本路径(可以使用$(MSBuildThisFileDirectory)
引用文件所在的目录)。您还可以在该文件中定义$(OutputPath)
,它将被任何其他项目继承(因此在示例中使用$(MSBuildProjectName)
)-除非这些项目自己设置了值,覆盖了您的默认值。prdp8dxp2#
在C#中...如果我向解决方案中添加新配置,我必须进入解决方案中的每个项目并更改输出文件夹。
如果您使用较新的SDK风格的
.csproj
项目文件,则输出文件夹将自动构建,并根据需要考虑配置、平台和目标框架。你能升级你的.csproj
文件吗?下面是一个“遗留”(非SDK风格)
.csproj
文件的片段:注意它是如何显式列出每个配置的
OutputPath
的?添加新的解决方案配置时,必须手动将该配置添加到每个.csproj
文件中。对于SDK风格的项目,等效的
.csproj
文件如下所示:Sdk
属性从SDK中带来了一堆MSBuild props/targets,这些props/targets根据与项目相关的Configurations
、Platforms
和TargetFrameworks
属性为您计算OutputPath
。jv4diomz3#
这是你要找的吗在项目属性中,Build Events,Edit Post-Build,然后此命令应执行此操作:
xcopy "$(TargetDir)" "$(TargetDir)$(ConfigurationName)\" /Y /I
您可能需要适应您的确切需求,过滤文件等
dpiehjr44#
Directory.Build.props在这方面非常强大。
可以在Directory.Build.props文件中设置。
您可能会发现必须删除csproj文件中已有的一个或多个值,才能使Directory.Build.props中的值生效。这是因为,项目文件中的值通常会覆盖Directory. Build. props中的值。$(Configuration)变量可以用作Directory.Build.props文件中的一部分。
您也可以在Directory.Build.props中设置一个值,例如:然后在csproj文件的值中使用它,例如:
https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-by-directory?view=vs-2022
**重要提示:**在使用Directory.Build.props文件进行实验时,请在对Directory.Build.props文件进行任何更改后关闭并重新打开解决方案(.sln),以确保更新的Directory.Build.props文件生效(忘记这样做可能会导致数小时的混乱)。