构建同时面向x86和x64平台的项目目标

3
在我的解决方案中,有一个类库,是一个Excel插件。当我构建该解决方案或该项目时,我希望首先将该项目构建为x86平台,输出一个名为xxx.dll的文件,然后再构建为x64平台,输出一个名为xxx_x64.dll的文件。要如何实现这一点,或者如何编辑csproj文件呢?谢谢。

你正在试图解决错误的问题。C#编译器生成MSIL,可以在任何架构上运行。将DLL部署需要使用Regasm.exe进行注册,以便Excel可以找到它。有两个版本,32位和64位。如果您不知道用户安装的Office版本,则只需运行这两个版本。使用相同的DLL。 - Hans Passant
2个回答

2
我该如何做,或者我应该如何编辑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

enter image description here

此外,如果你不想保留原始的xxx_.dll,你可以在后期构建中使用以下命令将其删除:
if $(Platform) == x64 (del "$(TargetPath)")

希望这能帮到你。

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

enter image description here

所有的代码文件(*.cs)和资源(图片或xml文件)都被移动到共享项目中,而其他两个项目都引用了它。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接