如何在不同的配置/平台组合中包含不同的包?



我有一个设计用于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个包和一个构建过程中每个包的依赖关系——这似乎是错误的。我还在"目录"中尝试了这段代码。

我们一直使用这种类型的引用在过去的汇编引用,它似乎工作,我不知道如何使packagerreference函数。有人知道在我的场景中如何最好地打包这个库吗?

在理想情况下,我希望以某种方式将64位和32位构建以及一些适当的目标存储在单个nuget包中,以便消费项目获得正确的位和正确的子项目引用。目前我不知道如何做到这一点,也没有得到任何其他可行的方案。

再说一遍,有人知道怎么做这样的事情吗?

谢谢。

到目前为止,我已经能够通过为每个ProjectReference使用单独的文件(.targets)来解决这个问题,然后通过引用特定的.targets文件来确保只有那些包含参考信息的文件被包含在项目中。

然后,我将.targets文件放入一个伞状nupkg中,以选择我想要使用的实际有效负载。整个安排如下:

我发布了8个有效负载文件,如下所示:

  • MyLibrary.v93HANAx64
  • MyLibrary.v93HANAx86
  • MyLibrary.v93SQLx64
  • MyLibrary.v93SQLx86
  • MyLibrary.v10HANAx64
  • MyLibrary.v10HANAx86
  • MyLibrary.v10SQLx64
  • MyLibrary.v10SQLx86

每个有效负载文件仅包含一个标准lib/net40文件夹,其中包含https://learn.microsoft.com/en-us/nuget/create-packages/creating-a-package页面中指定的库。

我的消费项目有4个配置:

  • B1v93HANA
  • B1v93SQL
  • B1v10HANA
  • B1v10SQL

我有一个伞形项目"MyLibrary.Targets"包含如下内容:

# #构建/net40/MyLibrary.Targets.targets

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Import Project="MyLibrary/$(Configuration).targets" />
</Project>

# #构建/net40/MyLibrary B1v10HANA.targets

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<PackageReference Include="MyLibrary.v10HANA$(Platform)" Version="1.0.*" />
</ItemGroup>
</Project>

# #构建/net40/MyLibrary B1v10SQL.targets

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<PackageReference Include="MyLibrary.v10SQL$(Platform)" Version="1.0.*" />
</ItemGroup>
</Project>

# #构建/net40/MyLibrary B1v93HANA.targets

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<PackageReference Include="MyLibrary.v93HANA$(Platform)" Version="1.0.*" />
</ItemGroup>
</Project>

# #构建/net40/MyLibrary B1v93SQL.targets

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<PackageReference Include="MyLibrary.v93SQL$(Platform)" Version="1.0.*" />
</ItemGroup>
</Project>

我在这个文件夹中也有目标文件"Debug.targets"one_answers";Release.targets"在这些情况下使用我首选的默认库。

。按照上面链接的微软指南,所有包的nupec文件都是相当标准的。一个默认的nuspec文件可以用'nuget spec'命令创建,然后可以编辑。

我的功能包nuspec文件在'package/metadata/dependencies'中有内容,其中标识了所需的包:

<dependencies>
<group targetFramework=".NETFramework4.0">
<dependency id="CryptLib" version="*" /> 
<dependency id="SAPBusinessOneSDK.HANA" version="10.0.*" />
</group>
</dependencies>

My Selector package "MyLibrary.targets"没有依赖项,但有一个文件节'package/files':

<files>
<file src="readme.txt" target="" />

<file src="build**" target="build" />
</files>

希望这能节省一些人的时间。

相关内容

  • 没有找到相关文章

最新更新