Gra*_*ton 27 c# visual-studio-2008 visual-studio
无论如何#define Constant在Visual Studio解决方案基础上?
可以在csproject的基础上定义一个常量,并且可以放入#define constantcs文件,但是我想知道是否可以在vs sln的基础上定义它?
Ade*_*ler 19
实际上,您可以使用常见项目设置的Ritch方法的变体.基本上,您必须对解决方案中每个项目文件的末尾进行一次更改:
<PropertyGroup Condition="'$(SolutionDir)' == '' or
'$(SolutionDir)' == '*undefined*'">
<SolutionDir>..\..\</SolutionDir>
</PropertyGroup>
<Import Project="$(SolutionDir)CommonSettings.targets" />
</Project>
Run Code Online (Sandbox Code Playgroud)
然后,您可以定义CommonSettings.targets以包含解决方案范围的设置.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<PropertyGroup>
<TacoBuild>true</TacoBuild>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
除非您想要覆盖或合并每个项目中已定义的项目设置,否则基本上就是这样.以下链接详细讨论了如何执行此操作.
http://www.ademiller.com/blogs/tech/2007/12/common-project-settings-for-your-visual-studio-solution/
小智 12
我有另一种做法:
编辑全局配置文件.例如在我的情况下它是.netcf2.0所以它是$(MSBuildBinPath)\microsoft.compactframework.csharp.targets.
添加以下行:
<Import Project="$(SolutionDir)CommonSettings.targets" Condition="exists('$(SolutionDir)CommonSettings.targets')" />
Run Code Online (Sandbox Code Playgroud)
这是告诉MSBuild导入CommonSettings.targets,如果它存在于您的解决方案文件夹中.
在解决方案文件夹下创建CommonSettings.targets.
例如,定义ABC符号:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ABC</DefineConstants>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)小智 8
从 MSBuild 15.0 开始,可以使用 Directory.Build.props 定义多个项目的常量。 https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019
它类似于 csproj,但它定义了将应用于子文件夹中的所有 csproj 的值。
在文件夹树的顶部创建一个名为 Directory.Build.props 的文件(以应用于所有子 csproj)。
添加:
<Project>
<PropertyGroup>
<DefineConstants>MaConstante</DefineConstants>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
间接有.如果您使用标志设置环境变量并运行VS:
set TacoBuild=true
devenv.eve bigproject.sln
Run Code Online (Sandbox Code Playgroud)
或者从命令行启动MSBuild:
msbuild /p:TacoBuild=true
Run Code Online (Sandbox Code Playgroud)
在.csproj文件中,您需要添加一个PropertyGroup:
<PropertyGroup Condition="'$(TacoBuild)'=='true'">
<DefineConstants>$(DefineConstants);TacoBuild</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您需要一个预处理器def:
#if TacoBuild
const int myConst = 42;
#endif
Run Code Online (Sandbox Code Playgroud)
VS唯一的替代方法是在构建设置中为新项目配置定义预处理器定义,并在构建中使用该配置.
非MSBuild解决方案是创建一个constants.cs文件并编写一个更新cs文件的自定义设置工具.我希望有更好的解决方案,但我还没找到.
| 归档时间: |
|
| 查看次数: |
16753 次 |
| 最近记录: |