【问题标题】:Different Assembly Name for Each Platform Target每个平台目标的不同程序集名称
【发布时间】:2010-05-17 13:53:11
【问题描述】:

我需要根据平台目标生成不同的程序集名称。例如,我有一个控制台应用程序“bob.exe”。我需要为 x86 和 x64 显式构建,而不是为 AnyCPU 构建,因此需要“bob32.exe”和“bob64.exe”。 Visual Studio 2010 项目选项中的应用程序选项卡禁用平台组合框。构建事件也不允许每个平台的选项,所以我不能很容易地重命名它。

更新:手动编辑项目文件似乎效果最好,构建过程中没有额外的文件,并且 pdb 具有匹配的名称。

【问题讨论】:

    标签: c# .net visual-studio-2010


    【解决方案1】:

    IDE 无法处理此问题,但 msbuild.exe 可以。使用记事本等编辑 .csproj 文件。您将看到用于 x86/x64 和 Debug/Release 设置的四个 PropertyGroup。第一个有一个<AssemblyName> 元素。将其复制并粘贴到其他 3 个组中。并重命名它们的值。

    【讨论】:

    • 这行得通,但请注意,构建事件宏不能正确使用它。你会发现无论选择何种平台目标,TargetName、TargetPath 和 TargetFileName 宏都具有相同的值,这很烦人。 (这是 VS2012 - 我没有在更高版本中尝试过,但我怀疑这与在版本之间更改宏的行为会破坏很多项目一样)
    • 它还会导致调试器无法运行构建的程序 - 您必须设置启动外部程序。
    【解决方案2】:

    您可以添加 Post-Built 事件以使用 $(PlatformName) 宏复制可执行文件。

    您需要复制(而不是重命名),否则调试器将无法工作。

    【讨论】:

    • 这非常接近,但 $(PlatformName) 是“x86”或“x64”,我没有看到重命名平台的选项。理想情况下,我想要“32”和“64”。我想我可以在每次构建后添加额外的两个步骤来盲目地将 bobx86.exe 复制到 bob32.exe。
    • 您可以转到配置管理器并重命名平台。
    • 我无法重命名项目中的平台,只能重命名解决方案。
    【解决方案3】:

    我已经尝试过@Hans Passant 的解决方案,但在我的情况下不起作用。

    此外,我需要在具有四个构建选项的场景中突出显示 .EXE 名称中的 ConfigurationPlatform 信息:

    • 1) 调试,x86
    • 1) 发布,x86
    • 1) 调试,x64
    • 1) 发布,x64

    为了得到想要的结果,我在第一个<PropertyGroup> 标签实例[包含<ProjectGuid><OutputType> 标签的那个实例] 的AT THE END 创建了四个XML 元素:

        <AssemblyName Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">MyExe_Debug_x86</AssemblyName>
        <AssemblyName Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">MyExe_Release_x86</AssemblyName>
        <AssemblyName Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">MyExe_Debug_x64</AssemblyName>
        <AssemblyName Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">MyExe_Release_x64</AssemblyName>
    

    我已经使用 VS2013 和 VS2017 在两个不同的项目上测试了这个解决方案。

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多