c# - 如何在编译时自动替换字符串(C# DLL)

标签 c# visual-studio build visual-studio-2013

我正在使用 Visual Studio 2013 编译 DLL,由于技术原因无法使用 System.Version,因为我的目标运行时环境之一不支持它。

有没有办法在编译时自动将程序集“FileVersion”放入常量?

public const string MyFileVersion = "{{ PLEASE REPLACE ME }}";

我没有使用构建服务器或任何类似的东西,只是 Visual Studio 2013。

最佳答案

似乎 t4 模板可以帮助您。这是template generation engine .有足够的信息可以提供帮助。

我制作了一个简单的模板,它可以满足您的需求。这只是一个示例,您可能需要在代码中进行一些调整:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="Microsoft.CSharp.dll" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".cs" #>

<#
        var assemblyVersionRegex = new Regex(@"AssemblyVersion\(\""(?<version>(.*?))\""\)");
        var pathBase = new FileInfo(Host.TemplateFile).DirectoryName;
        var assemblyInfoPath = Path.Combine(pathBase, @"Properties\AssemblyInfo.cs");

        var assemblyInfoSources = File.ReadAllText(assemblyInfoPath);
        var match = assemblyVersionRegex.Match(assemblyInfoSources);
        var version = match.Success 
                ? match.Groups["version"].Value
                : "unknow";
#>

public static class SomeAssemblyInfo
{
    public const string Version = "<#= version #>";
}

因此,它读取文件 AssemblyInfo.cs(如果需要,也可以读取另一个文件)从中获取版本并准备类 SomeAssemblyInfo :

public static class SomeAssemblyInfo
{
    public const string Version = "1.0.0.0";
}

您需要做的最后一件事是在构建时运行此模板。 Here您可以找到操作方法。

关于c# - 如何在编译时自动替换字符串(C# DLL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964206/

相关文章:

c# - 如何使用 LINQ to XML 连接具有相同名称值的所有子元素

c# - 仅从 DateTime 对象获取日期或时间

tfs - Microsoft TFS 在没有 VCS 的情况下创建构建

android - 移除过时的 Android SDK 构建工具有什么影响

c# - 如何在开始 xUnit 测试之前启动 docker-compose 中指定的容器?

java - 构建失败,并带有异常(:android:signingConfigWriterDebug)

c# - Selenium 在 Chrome 版本 32.0.1700.72 m 中失败

c# - 如何通过语言文化获取代码页?

c++ - 如何修复 SFML ln VS 2017 的错误?

c++ - 如何使用 Visual Studio CppUnitTestFramework 访问我的代码