【问题标题】:How do I change the dll name when I dotnet publish?dotnet 发布时如何更改 dll 名称?
【发布时间】:2021-02-21 23:10:01
【问题描述】:

除了最后一行之外,我所有的 .net 核心 dockerfile 99% 相同: ENTRYPOINT ["dotnet", "<APP NAME HERE>.dll"]

我觉得我很愚蠢,因为否则它们可能都是相同的

有没有办法用dotnet publish -c Release -o out 命令更改dll 名称?我可以在不修改 csproj 文件或其他任何东西的情况下做到这一点吗?

【问题讨论】:

    标签: c# docker .net-core dockerfile .net-3.0


    【解决方案1】:

    您可以使用此命令执行构建并重命名程序集:

    dotnet msbuild -r -p:Configuration=Release;AssemblyName=foo
    

    在 Linux/macOS 上,您必须在命令周围添加引号,如下所示:

    dotnet msbuild -r '-p:Configuration=Release;AssemblyName=foo'
    

    但是,由于设置了global property,可能会产生意想不到的副作用。您应该从 2019 年 9 月开始阅读这个未解决的问题,因为它直接回答了您关于 Docker 和重命名输出的问题:https://github.com/dotnet/msbuild/issues/4696

    另外,我知道您想避免编辑 .csproj 文件,但如果您不知道,可以添加 AssemblyName 属性并以这种方式设置输出名称。

    如:

      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <AssemblyName>foo</AssemblyName>
      </PropertyGroup>
    

    这将创建foo.dll(以及其他文件,例如.pdb.deps.json等)

    【讨论】:

      【解决方案2】:

      正如the documentation 建议的那样:

      您可以使用 docker run --entrypoint 标志覆盖 ENTRYPOINT 指令。

      该命令将如下所示:

      docker run --entrypoint dotnet YOUR_IMAGE "<APP NAME HERE>.dll"
      

      正如另一个helpful bit of documentation 建议的那样,您也可以在docker run 命令的末尾将参数传递给入口点,如下所示:

      docker run YOUR_IMAGE "<APP NAME HERE>.dll"
      

      这还需要您将ENTRYPOINT 更改为:

      ENTRYPOINT ["dotnet"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-04
        • 1970-01-01
        相关资源
        最近更新 更多