我有一个为 net Framework 4.7.2 和 net 7.0 构建的多目标 C# 项目。项目的 TargetFrameworks 元素设置为:
<TargetFrameworks>net472;net7.0-windows</TargetFrameworks>
现在我需要将 net Framework 和 net 7 构建输出包含到我的安装程序(不同的文件夹)中。
我尝试按照 WiX 讨论中描述的步骤进行操作: https://github.com/wixtoolset/issues/issues/7241
最初,我按照那里描述的“旧”方式进行操作:在 wixproj 中,我插入 2 个项目引用,并显式指定了不同的 BindName:
<ProjectReference Include="..\MyProject\MyProject.csproj" SetTargetFramework="TargetFramework=net472" BindName="MyProject.net472"/>
<ProjectReference Include="..\MyProject\MyProject.csproj" SetTargetFramework="TargetFramework=net7.0-windows" BindName="MyProject.net7.0-windows"/>
然后在 wxs 文件中我将文件包含在组件中:
...
<File Id="MyFile" Name="MyProject.dll" Source="!(bindpath.MyProject.net472)\MyProject.dll" />
...
<File Id="MyFile" Name="MyProject.dll" Source="!(bindpath.MyProject.net7.0-windows)\MyProject.dll" />
这似乎有效。文件已找到并打包。但它需要 wixproj 文件中的 2 个 ProjectReference 条目。按照 WiX 讨论中描述的方式,应该可以只添加一个:
<ProjectReference Include="..\MyProject\MyProject.csproj" TargetFrameworks="net472,net7.0-windows"/>
它应该自动生成 BindName。
但是,在我这样做之后,找到了具有 MyProject.net472 绑定路径的文件,但没有找到具有 MyProject.net7.0-windows 绑定路径的文件。最后我也尝试了不加-windows,结果是一样的。怎么了?
不是构建管道中某处的有效标识符字符(我认为是 MSBuild,或者可能是预处理器变量),因此在 .wxs 代码中使用时
-
必须将其更改为。_