用C#中的Defines对配置进行倍数运算

本文关键字:运算 配置 中的 Defines | 更新日期: 2023-09-27 18:29:47

我有一个包含25个C#项目的解决方案。

对于解决方案的每次编译,我都会使用预编译器指令调整一些项目配置。

当我需要向配置添加指令时。我必须去每一个项目,并添加该指令。当我添加一个新的配置时,它是一样的,甚至更糟。

在C++项目中,我会有一个.h文件,它将包含在所有项目中,以具有类似全局配置文件的内容。

但是,我怎么能用Visual Studio和C#做这样的事情呢?

用C#中的Defines对配置进行倍数运算

实现这一点的一个好方法是从每个项目配置中引用外部配置文件。

您可以使用频繁更改的信息/目录创建一个配置文件,并从每个项目配置文件中引用它。

例如:

指令。confg:

<appSettings>
    <add key="ThisDirectory" value="This'Directory'Path"/>
    <add key="ThatDirectory" value="That'Directory'Path"/>
</appSettings>

web/app配置中,您将拥有:

<configuration>
    <appSettings file="C:'PathToYourExternalConfigFile'directives.config">
        <add key="OtherKeyNotInExternalConfig" value="SomeValue" />
    </appSettings>
</configuration>

现在,只需要更新directionales.config文件,所有其他项目都将自动进行最新的配置更改。

如果您使用msbuild构建项目,那么您所需要做的就是设置一个与您的定义同名的环境变量。

#if OPTION_ONE
    // option one code here 
#else
   // option one not set
#endif

然后从开发者命令提示符,你可以像这样构建

set OPTION_ONE=true
msbuild YourSolution.sln 

如果这不起作用,你可以将以下内容添加到你的项目文件中

<DefineConstants Condition="'%(OPTION_ONE)' != ''">OPTION_ONE</DefineConstants>

编辑:

为定义创建一个通用的c#文件,就像在c++中使用头一样。创建一个用户文件(即MyProject.csproj.user)以包含通用cs文件。用户文件不需要包含在项目中。如果存在,Visual studio将自动使用它:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
   <Compile Include="$(SolutionDir)CommonFile.cs"/>
</Project>

将该文件复制到每个项目目录,更改文件名以匹配项目。

或者,您可以通过添加现有项目将通用文件添加为链接,然后单击add旁边的选项箭头,然后选择add as link