我有一个设计用于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>
希望这能节省一些人的时间。