bev*_*qua 51 c# c-preprocessor
有没有办法全局声明#define?
就像我想拥有一个文件,例如,
#define MONO
Run Code Online (Sandbox Code Playgroud)
我希望所有源代码文件都知道这个预处理器指令已经定义.我怎么做到这一点?
BJ *_*die 36
更新:您不能在"解决方案范围"定义afaik,但下面的答案可以在每个项目的基础上工作.
您可以在编译属性或构建选项中设置它们:
http://msdn.microsoft.com/en-US/library/76zdzba1(v=VS.80).aspx(VS2008) http://msdn.microsoft.com/en-US/library/76zdzba1(v=VS .100).aspx(VS2010)
请参阅"设置自定义常量"标题.
更新
右键单击项目并从菜单中选择属性,即可进入构建选项.
Mal*_*chi 13
多年后,与阿列克谢的回答相似,但天生支持
一个人可以制作一个Directory.Build.props
类似于NuGet.Config
文件的文件
https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019
我们的看起来像:
<Project>
<PropertyGroup>
<DefineConstants>RC_427</DefineConstants>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
它有效地将其包含在您的 SLN 中的所有 CSPROJ 文件中。出于某种原因,通过谷歌很难找到特定的解决方案。自 MSBuild 15 以来一直存在
Ale*_*kov 11
我知道C#项目的解决方案(我没有对其他任何项目进行测试)
例如,您有:
Project1\
Project2\
Solution1\Solution1.sln
Solution2\Solution2.sln
Run Code Online (Sandbox Code Playgroud)
SolutionDefines.targets
在解决方案目录中创建文件
Project1\
Project2\
Solution1\Solution1.sln
Solution1\SolutionDefines.targets
Solution2\Solution2.sln
Solution2\SolutionDefines.targets
Solution3\Solution2.sln
Solution3\|no target file|
Run Code Online (Sandbox Code Playgroud)
在每个项目文件中添加:
<Import Project="$(SolutionDir)SolutionDefines.targets" Condition="exists('$(SolutionDir)SolutionDefines.targets')" />
Run Code Online (Sandbox Code Playgroud)
在Solution1\SolutionDefines.targets
添加:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);TRACING_BUILD</DefineConstants>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
在Solution2\SolutionDefines.targets
添加:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ANOTHER_DEFINE</DefineConstants>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以:
对于解决方案1-所有项目均已TRACING_BUILD
添加定义
对于Solution2-所有项目均已ANOTHER_DEFINE
添加定义
对于Solution3-所有项目-未添加定义
在这种方法中,必须将所有具有解决方案范围定义的解决方案存储在单独的目录中
我认为没有办法创建解决方案范围的#define。您可以为每个项目/程序集创建一个,正如其他答案所描述的那样,但如果您需要所有源代码文件来了解该 #define,则需要为解决方案中的每个项目执行此操作。
归档时间: |
|
查看次数: |
27133 次 |
最近记录: |