在Visual Studio解决方案基础上有#define Constant
吗?
可以在csproject的基础上定义一个常量,并且可以将#define constant
放在cs文件中,但是我想知道是否可以在vs sln的基础上定义它?
答案 0 :(得分:19)
您可以使用常见项目设置实际使用Ritch方法的变体。基本上,您必须对解决方案中每个项目文件的末尾进行一次更改:
<PropertyGroup Condition="'$(SolutionDir)' == '' or
'$(SolutionDir)' == '*undefined*'">
<SolutionDir>..\..\</SolutionDir>
</PropertyGroup>
<Import Project="$(SolutionDir)CommonSettings.targets" />
</Project>
然后,您可以定义CommonSettings.targets以包含解决方案范围的设置。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<PropertyGroup>
<TacoBuild>true</TacoBuild>
</PropertyGroup>
</Project>
除非您想要覆盖或合并每个项目中已定义的项目设置,否则基本上就是这样。以下链接详细讨论了如何执行此操作。
http://www.ademiller.com/blogs/tech/2007/12/common-project-settings-for-your-visual-studio-solution/
答案 1 :(得分:12)
我有另一种做法:
编辑全局配置文件。例如,在我的情况下,它是.netcf2.0,所以它是$(MSBuildBinPath)\microsoft.compactframework.csharp.targets
。
添加以下行:
<Import Project="$(SolutionDir)CommonSettings.targets" Condition="exists('$(SolutionDir)CommonSettings.targets')" />
这是告诉MSBuild导入CommonSettings.targets,如果它存在于您的解决方案文件夹中。
在解决方案文件夹下创建CommonSettings.targets。
例如,定义ABC符号:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ABC</DefineConstants>
</PropertyGroup>
</Project>
答案 2 :(得分:6)
间接存在。如果使用标志设置环境变量并运行VS:
set TacoBuild=true
devenv.eve bigproject.sln
或从命令行启动MSBuild:
msbuild /p:TacoBuild=true
在.csproj文件中,您需要添加一个PropertyGroup:
<PropertyGroup Condition="'$(TacoBuild)'=='true'">
<DefineConstants>$(DefineConstants);TacoBuild</DefineConstants>
</PropertyGroup>
在您的代码中,您需要一个预处理器def:
#if TacoBuild
const int myConst = 42;
#endif
VS唯一的替代方法是在构建设置中为新项目配置定义预处理器定义,并在构建中使用该配置。
非MSBuild解决方案是创建一个constants.cs文件并编写一个更新cs文件的自定义设置工具。我希望有更好的解决方案,但我还没找到。
答案 3 :(得分:0)
这对于Unity项目是可能的。
创建一个名为
mcs.rsp(等效于.Net 3.5的目标)或
csc.rsp(面向.Net 4.0等效)
/ Assets /文件夹中的
允许您执行此操作。
示例: /Assets/csc.rsp文件包括:
-define:THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT
-define:ANOTHER_GLOBAL_PREPROCESSOR_CONSTANT
在项目中,在任何播放器或编辑器c#脚本中:
#if THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT
Debug.Log("THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT is defined"); // compiles
#else
Debug.Log("THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT is not defined");
#endif
在Unity 2019.1.2上测试
https://docs.unity3d.com/Manual/PlatformDependentCompilation.html
答案 4 :(得分:0)
从MSBuild 15.0开始,可以使用Directory.Build.props定义多个项目的常量。 https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019
这就像一个csproj,但是它定义了将应用于子文件夹中所有csproj的值。
在文件夹树的顶部创建一个文件(适用于所有子csproj),名为Directory.Build.props。
添加:
<Project>
<PropertyGroup>
<DefineConstants>MaConstante</DefineConstants>
</PropertyGroup>
</Project>