gpt4 book ai didi

c# - VisualStudio 解决方案中的条件项目路径变量

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:29 28 4
gpt4 key购买 nike

我们有一个大型 C# 程序,分为 2 个主要组:内核 库和(客户)特定 应用程序和服务。

我们的 TFS 结构(简化)是这样的:

内核

  • 深度学习计划
  • 第 1 版
  • 第 2 版
  • 第 3 版
  • ...

客户A

  • 深度学习
  • 发布

客户B

  • 深度学习
  • 发布

我们使用 nugets 来编译和分发我们的内核代码,并将其包含到客户应用程序中。所以我们可以轻松地转移到新版本/发布。然而,我们并不满足于只有 dll。我们希望在任何地方都能拥有完整的调试和编辑体验。

您可以在客户解决方案中包含内核项目,但它们将引用版本 X,因此如果我们想移动到新版本,我们必须为每个客户更改每个解决方案和项目文件,这是一个很多(N 个客户 x M 个服务/项目 = 很多)

我读到您可以使用环境变量来更改 .sln 和 .csproj 文件中的某些值,但我们希望所有开发人员都能够更容易地控制这些值。我更喜欢引用也可以存储在 TFS 中的共享变量。

我制作了一个小的 .sln 文件来澄清:

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp", "ConsoleApp\ConsoleApp.csproj", "{B6B9AE41-99ED-47CE-B35C-F693C5F5F736}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibKernel", "..\..\Release 1\LibKernel\LibKernel\LibKernel.csproj", "{439BD82B-340D-4D69-B367-E52E0DF27983}"
EndProject

我想改变这部分:

"LibKernel", "....\Release 1\LibKernel\LibKernel\LibKernel.csproj", "{439B....}"

进入

"LibKernel", "....\{CustomerA.CurrentRelease}\LibKernel\LibKernel\LibKernel.csproj", "{439B....}"

类似的东西(也适用于 .csproj 文件),但如果它们是更好的方法,我很高兴听到它们。

非常感谢

最佳答案

我们使用这种想法来根据用户需要引用位于特定位置的程序集。

首先你需要保存一个内容如下所示的外部文件..

假设文件名是buildpath.xml

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<AssemblyDirLocation>C:\inetpub\wwwroot\SiteInstance\Website</AssemblyDirLocation>
</PropertyGroup>
</Project>

接下来我们将此配置导入 .csproj。我相信它也适用于 .sln 文件

为了正确理解,我在此处包含了一些来自 .csproj 文件的周围文本

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="..\build\buildpath.xml" Condition="Exists('..\build\buildpath.xml')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<!-- more text -->

注意上面文本的下一行

<Import Project="..\build\buildpath.xml" Condition="Exists('..\build\buildpath.xml')" />

用法:

.csproj.sln 文件中,您将导入上述文件,您可以编写下面的宏来替换值。注意标签名称与编写的宏匹配,即 $(AssemblyDirLocation) .

<ItemGroup>
<Reference Include="Site.Kernel">
<HintPath>$(AssemblyDirLocation)\bin\Site.Kernel.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>

每当您在 buildpath.xml 外部文件中进行更改时,您都需要重新加载引用项目。

我希望这很清楚并且会有所帮助。

关于c# - VisualStudio 解决方案中的条件项目路径变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420766/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com