git Visual Studio 2022 -使用版本控制配置自定义项目生成以轻松配置输出应用程序

uqxowvwt  于 2022-11-20  发布在  Git
关注(0)|答案(1)|浏览(367)

我遇到了一个问题,我希望在生成项目的方式之间轻松切换。整个项目是一个包含许多.csproj文件的.sln。我希望用尽可能少的步骤更改输出目录和一些附加设置。我正在使用版本控制。
假设我的项目是:

  • MainSolution.sln
  • Project1.csproj
  • Settings1.settings
  • Project2.csproj
  • Settings2.settings
  • Project3.csproj
  • Settings3.settings

customer 1项目应构建在文件夹/CustomerAlpha中应将Settings 1中值设置为True customer 2项目应构建在文件夹/CustomerBeta中应将Settings 1中值设置为False customer 3项目应构建在文件夹/CustomerGamma中不需要且不应包括Project 3
我知道这可以通过使用不同的分支来实现,但是我不想总是担心挑选提交、重定基或合并......这基本上就是我现在所做的。
我使用Directory.Build.props文件根据客户设置输出目录,以便可以将输出目录用作调试位置(用于代码中的相对路径)。
我知道Project配置,但目前我只有Debug/Release用于条件编译。此外,我在某个地方读到过添加构建配置是VS特定的,它不会存储在git上并在开发人员之间共享?
我听说过为Visual Studio工具栏制作自定义控件,但我还没有抽出时间来测试它。我假设这也是VS特定的事情,因为这将再次为多个开发人员带来问题。
这是我在网上搜索得到的最远的结果,但是我已经没有搜索什么的想法了...
实现这一目标的最佳方法是什么?如何确保解决方案在任何PC上或由任何开发人员构建时都能正常工作?
感谢您的回复!
(EDIT:固定格式)

vmdwslir

vmdwslir1#

经过一些进一步的测试,我找到了一个最适合我的解决方案。
我依赖于Directory.build.props和配置管理器(就像TTT建议的那样)。这样,我只需要为解决方案中的主项目定义配置,而不是为每个项目定义配置。
创建新的构建配置(DebugCustomer 1)后,我在Directory.build.props中定义了一个新宏:

<PropertyGroup Condition="$(Configuration) == DebugCustomer1">
    <ProjectCustomer>Customer1</ProjectCustomer>
</PropertyGroup>

在同一文件中,我为每个客户定义了设置:

<!-- Settings for Customer1 project -->
<PropertyGroup Condition="$(ProjectCustomer) == Customer1">
    <ProjectTitle>abcdef</ProjectTitle>
    <ClientIP>192.168.1.10</ClientIP>
    <OfflineMode>True</OfflineMode>
</PropertyGroup>

<!-- Settings for Customer2 project -->
<PropertyGroup Condition="$(ProjectCustomer) == Customer2">
    <ProjectTitle>abcdefghij</ProjectTitle>
    <ClientIP>192.1.1.10</ClientIP>
    <OfflineMode>False</OfflineMode>
</PropertyGroup>

然后,我可以将宏传递给任何项目,在这些项目中,我希望使用预处理器指令通过编辑.csproj文件来控制我的构建,如下所示:

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT' ">
  <DefineConstants>WINDOWS;$(ProjectCustomer)</DefineConstants>
</PropertyGroup>

那么我就可以简单地使用该指令结束(例如:我希望根据客户使用不同的数据库种子):

#if Customer1
  <code>
#endif

然后,对于整个解决方案中的各种Settings.settings和app.config文件,我使用PostBuild事件替换输出文件中的字符串。例如,在Settings.settings中,我有一个名为ClientIPAddress的设置,其值为ClientIP。在PostBuild事件中,我将生成的文件中的ClientIP字符串替换为Directory. build. props中定义的$(ClientIP)值。

**UPDATE:**使用MSBuild,我可以从命令行生成项目,还可以更改目录中定义的任何属性。Build.props:

msbuild .csproj /p:配置=调试/p:项目客户=客户1

相关问题