【问题标题】:Build project targeting for both x86 and x64 platform为 x86 和 x64 平台构建项目目标
【发布时间】:2017-12-01 01:58:19
【问题描述】:

在我的解决方案中,有一个类库,它是一个 excel 插件。当我构建解决方案或那个项目时,我希望这个项目首先针对 x86 构建,输出一个名为 xxx.dll 的文件,然后针对 x64 输出一个名为 xxx_x64.dll 的文件。

我应该怎么做,或者我该如何编辑 csproj 文件?谢谢。

【问题讨论】:

  • 您正试图解决错误的问题。 C# 编译器生成 MSIL,它可以在任何架构上运行。部署 DLL 需要使用 Regasm.exe 注册它,以便 Excel 可以找到它。它有两个版本,32 位和 64 位。如果您对用户安装的 Office 的风格一无所知,那么只需运行它的两个版本。使用相同的 DLL。

标签: c# visual-studio msbuild x86-64 projects-and-solutions


【解决方案1】:

我应该怎么做,或者我该如何编辑 csproj 文件?

程序集 xxx.dll 的名称由项目文件中的属性AssemblyName 定义,如果要更改以平台命名的默认输出程序集,可以通过以下代码简单地更改该属性的值项目文件.csproj:

<AssemblyName>TestWithDllWithPlatform_$(Platform)</AssemblyName>

但是使用此设置,当您针对 x86 时,您将获得名为 xxx_x86.dll 的输出程序集。

如果您仍然希望针对 x86 输出名为 xxx.dll 而不是 xxx_x86.dll 的文件,您可以在针对 x64 时尝试使用构建后事件重命名 dll 文件:

if $(Platform) == x64 (copy /y "$(TargetPath)" "$(ProjectDir)$(OutDir)$(TargetName)_$(Platform).dll")

在这种情况下,当您以x64 为目标时,输出的程序集名为xxx_x64.dll

另外,如果你不想保留原来的xxx_.dll,你可以在构建后用下面的命令删除它:

if $(Platform) == x64 (del "$(TargetPath)")

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    最后,我通过在 Visual Studio 中使用共享项目解决了这个问题。我想要的是通过构建解决方案生成两个 Excel Addin 程序集,一个针对x86 平台或AnyCPU,另一个针对x64 平台。

    这是我的项目快照:

    所有代码文件(*.cs)和资源(图像或 xml 文件)都被移动到共享项目中,并且其他 2 个项目都有对其的引用。

    至于其他 2 个项目,它们之间存在一些差异,例如程序集名称和目标平台。一个是XXX.dll,目标是AnyCPU,另一个是XXX_64.dll,目标是x64

    在构建解决方案时,两个项目中的每一个都会发布相应的程序集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多