【发布时间】:2021-10-19 12:52:19
【问题描述】:
我有一个旨在与 Sap Business One 的 SDK 配合使用的库。 V10 的 SDK 与 V9.3 的不同,我也有 x86/x64 和 SQL/HANA 版本,这给了我 8 个排列,因此有 8 个包。
使用这些包的项目也将有 8 个构建。我想设置项目文件和目标,以便为特定的配置和平台选择特定的包。我正在努力解决这个问题,但这绝对没有意义。
目前我的项目文件中有以下内容:
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v93SQL|x64' ">
<PackageReference Include="OchALCommon.v93SQLx64" Version="1.0.*" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v93SQL|x86' ">
<PackageReference Include="OchALCommon.v93SQLx86" Version="1.0.*" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v93HANA|x64' ">
<PackageReference Include="OchALCommon.v93HANAx64" Version="1.0.*" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v93HANA|x86' ">
<PackageReference Include="OchALCommon.v93HANAx86" Version="1.0.*" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v10SQL|x64' ">
<PackageReference Include="OchALCommon.v10SQLx64" Version="1.0.*" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v10SQL|x86' ">
<PackageReference Include="OchALCommon.v10SQLx86" Version="1.0.*" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v10HANA|x64' ">
<PackageReference Include="OchALCommon.v10HANAx64" Version="1.0.*" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'B1v10HANA|x86' ">
<PackageReference Include="OchALCommon.v10HANAx86" Version="1.0.*" />
</ItemGroup>
Visual Studio 指出所有 8 个包和每个包的依赖关系的构建过程 - 这似乎是错误的。我还在“Directory.Build.targets”文件中尝试了这段代码,最初似乎可以工作,但随后 Visual Studio 停止响应目标文件中的更改(即使在重新启动后)。
我们过去一直使用这种引用与Assembly references,它似乎工作,我不知道如何制作PackageReference函数。有人知道如何在我的场景中最好地打包这个库吗?
在理想的世界中,我想以某种方式将我的 64 位和 32 位构建以及一些适当的目标存储在单个 nuget 包中,以便使用项目获得正确的位数和正确的子项目引用。目前我无法弄清楚如何做到这一点,也无法获得任何其他可行的方案。
再次,有人知道如何做这样的事情吗?
谢谢。
【问题讨论】:
-
不知道 VS 如何查看所有引用,因为似乎没有 2 个条件可以同时为真(它真的在构建过程中尝试所有这些条件吗?),但你试过一个像
<PackageReference Include="OchALCommon.$(Configuration.Substring(2))$(Platform)" />这样的单一参考? -
我实际上最终在最终文件名中使用了一些参数注入,并且有效,非常感谢。问题是 ProjectReference 是粘性的,计算的包列表保存在 projects.assets.json 中。 StackOverflow 上的另一个答案说,完成这项工作的唯一方法是将 PackageReference 放在一个单独的文件中,并有条件地包含该文件。我已经使用该技术制定了工作包的结构。
-
@MarkRabjohn 如果可能的话,我建议你总结并发布作为答案,这将是一个很好的参考,非常有用。
标签: msbuild visual-studio-2019