【问题标题】:Persistently unique AssemblyName on every build每次构建都具有持久唯一的 AssemblyName
【发布时间】:2019-01-14 03:24:14
【问题描述】:

我有一个简单的解决方案,其中包含一个 dll 项目(在别处热重载)。

我需要 AssemblyName 在每个构建中都是唯一的(由于我在同一个应用程序域中进行热重载的方式)。

但是,我还需要 AssemblyName 保持不变,直到下一次构建之前,这样我才能调试(dll 身份是基于 AssemblyName 建立的)。

我一直在使用用当前刻度更新 csproj 中的 AssemblyName 的东西。但是,这不符合我的第二个要求 - 在项目中执行各种操作(不一定是重建)会刷新 IDE 中的 AssemblyName(我正在使用 Rider)。

关于如何实现这一点的任何想法?

【问题讨论】:

    标签: msbuild csproj


    【解决方案1】:

    我们需要两点:

    1. 仅在 Release 上更改程序集名称。
    2. 为程序集生成唯一名称。

    仅在 release 上更改 AssemblyName

    .csproj 文件中配置的程序集的名称,带有标签AssemblyName,在PropertyGroup 部分中。

    为了仅更改 Release 的名称,我们需要向 PropertyGroup 添加条件:

    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <AssemblyName>MyCustomOrDefaultAssemblyName</AssemblyName>
    </PropertyGroup>
    

    为程序集生成唯一名称

    我们使用DateTime 来获得一个唯一的名称:

    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <CurrentDate>$([System.DateTime]::Now.ToString(yyyyMMdd-mmss))</CurrentDate>
      <AssemblyName>MyCustom$(CurrentDate)</AssemblyName>
    </PropertyGroup>
    

    我们也可以从外部注入名称。如果我们从命令行进行构建,我们可以通过在构建命令中添加 /p:name=value 来注入属性,并将该属性用作 AssemblyName:

    csproj 文件:

    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <AssemblyName>$(GeneratedProperty)</AssemblyName>
    </PropertyGroup>
    

    命令行:

    MSBuild /t:Build /p:GeneratedProperty=%TIME:~0,2%.%TIME:~3,2%
    dotnet build -c Release -p:GeneratedProperty=%TIME:~0,2%.%TIME:~3,2%
    

    【讨论】:

    • 感谢您的努力,但这并不能解决我的问题。为什么要限制它只是释放?对于第二部分,每次重新评估 csproj 时都会生成唯一名称,这太激进了。
    • 我仍然无法弄清楚您的问题是什么。 need the AssemblyName to stay the same until right before the next build,你能解释一下吗?
    • 调试工作基于程序集标识(这又取决于 AssemblyName)。我不仅需要不同的 dll 名称,我还需要它在下次构建之前保持不变。换句话说,我正在尝试自动化这个工作流程:“更改代码,更改程序集名称,构建”。使用您的方法(和我的初始方法),工作流将更像是“更改代码、更改程序集名称、构建、更改程序集名称、更改程序集名称”。我无法确定 .csproj 文件何时被重新评估,但例如在进入其属性时会发生这种情况(右键单击-> Rider 中的属性)。
    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 2014-01-16
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多