【问题标题】:Multiples configurations with Defines in C#使用 C# 中的定义进行多重配置
【发布时间】:2018-07-03 19:25:31
【问题描述】:

我有一个大约有 25 个 C# 项目的解决方案。

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

当我需要向配置添加指令时。我必须去每个项目并添加该指令。当我添加一个新配置时,情况同样糟糕。

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

但是,我怎样才能使用 Visual Studio 和 C# 来做类似的事情呢?

【问题讨论】:

标签: c#


【解决方案1】:

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

您可以只创建一个配置文件,其中包含经常更改的信息/目录,并从每个项目配置文件中引用它。

例如:

directives.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>

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

【讨论】:

  • 它适用于 WinForm 应用程序(不是 .NET)。这样做会导致运行时配置,我需要一个编译时间。
【解决方案2】:

如果您使用 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>

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

或者您可以通过添加现有项目来将公共文件添加为链接,然后单击“添加”旁边的选项箭头并选择“添加为链接”

【讨论】:

  • 感谢您的建议,但由于调试原因,我需要从 Visual Studio 更改此值。此外,问题不是设置一个定义,而是一个定义有时会设置多个其他定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2019-11-24
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多