使用 .nuspec 和 .targets (C++) 制作的 nuget 包
Consuming nuget package made with .nuspec and .targets (C++)
正在努力打包已编译的 c++ dll(x86 和 x64),以便 C# 库可以使用它。
设法使用 nuspec 文件打包和推送 dll,但是当使用 VS2019 包管理器时,它成功安装了包,但是没有出现引用。 (任意 Cpu)
.nuspec
<?xml version="1.0"?>
<package >
<metadata>
<id>component1</id>
<version>1.0.0</version>
<description>mycomponent</description>
<authors>Me</authors>
</metadata>
<files>
<file src="32\component1.dll" target="build\x86" />
<file src="64\component1.dll" target="build\x64" />
<file src="component1.targets" target="lib\net40" />
</files>
</package>
由于消费项目的目标是 .NET 4.0,因此我创建了一个 component1.targets 指向同一框架的文件
.目标
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
<Reference Include="component1">
<HintPath>"$(MSBuildThisFileDirectory)..\..\build\x64\component1.dll"</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x86' OR '$(Platform)' == 'AnyCPU' OR '$(Platform)' == 'Any CPU' ">
<Reference Include="component1">
<HintPath>$(MSBuildThisFileDirectory)..\..\build\x32\component1.dll</HintPath>
</Reference>
</ItemGroup>
你的脚步乱七八糟
您应该注意,目标文件应命名为 .targets`,与 nuget 包 ID 同名,否则无法运行。参见 this link。
还有,目标文件应该放在nupkg.
的build
文件夹中
这是两个重要提示。
1) 请将您的 nuspec
文件更改为:
<?xml version="1.0"?>
<package >
<metadata>
<id>component1</id>
<version>1.0.0</version>
<description>mycomponent</description>
<authors>Me</authors>
</metadata>
<files>
<file src="32\component1.dll" target="build\x86" />
<file src="64\component1.dll" target="build\x64" />
<file src="component1.targets" target="build" />
</files>
</package>
2) 然后,把你的component1.targets
改成这些:
您应该删除 "$(MSBuildThisFileDirectory)..\..\build\x64\component1.dll"
下的 ""
。
<Project>
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
<Reference Include="component1">
<HintPath>$(MSBuildThisFileDirectory)..\build\x64\component1.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x86' OR '$(Platform)' == 'AnyCPU' OR '$(Platform)' == 'Any CPU' ">
<Reference Include="component1">
<HintPath>$(MSBuildThisFileDirectory)..\build\x32\component1.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
3)使用nuget pack
重新打包nuget包。在安装这个新版本的 nuget 包之前,请 clean nuget caches first 或删除 C:\Users\xxx(current user name)\.nuget\packages
.
下的所有文件
在我这边效果很好。
我的 nuget 包名为 testt
,我在 x64
下引用了 ClassLibrary21.dll
。
正在努力打包已编译的 c++ dll(x86 和 x64),以便 C# 库可以使用它。
设法使用 nuspec 文件打包和推送 dll,但是当使用 VS2019 包管理器时,它成功安装了包,但是没有出现引用。 (任意 Cpu)
.nuspec
<?xml version="1.0"?>
<package >
<metadata>
<id>component1</id>
<version>1.0.0</version>
<description>mycomponent</description>
<authors>Me</authors>
</metadata>
<files>
<file src="32\component1.dll" target="build\x86" />
<file src="64\component1.dll" target="build\x64" />
<file src="component1.targets" target="lib\net40" />
</files>
</package>
由于消费项目的目标是 .NET 4.0,因此我创建了一个 component1.targets 指向同一框架的文件
.目标
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
<Reference Include="component1">
<HintPath>"$(MSBuildThisFileDirectory)..\..\build\x64\component1.dll"</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x86' OR '$(Platform)' == 'AnyCPU' OR '$(Platform)' == 'Any CPU' ">
<Reference Include="component1">
<HintPath>$(MSBuildThisFileDirectory)..\..\build\x32\component1.dll</HintPath>
</Reference>
</ItemGroup>
你的脚步乱七八糟
您应该注意,目标文件应命名为
还有,目标文件应该放在nupkg.
的build
文件夹中
这是两个重要提示。
1) 请将您的 nuspec
文件更改为:
<?xml version="1.0"?>
<package >
<metadata>
<id>component1</id>
<version>1.0.0</version>
<description>mycomponent</description>
<authors>Me</authors>
</metadata>
<files>
<file src="32\component1.dll" target="build\x86" />
<file src="64\component1.dll" target="build\x64" />
<file src="component1.targets" target="build" />
</files>
</package>
2) 然后,把你的component1.targets
改成这些:
您应该删除 "$(MSBuildThisFileDirectory)..\..\build\x64\component1.dll"
下的 ""
。
<Project>
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
<Reference Include="component1">
<HintPath>$(MSBuildThisFileDirectory)..\build\x64\component1.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x86' OR '$(Platform)' == 'AnyCPU' OR '$(Platform)' == 'Any CPU' ">
<Reference Include="component1">
<HintPath>$(MSBuildThisFileDirectory)..\build\x32\component1.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
3)使用nuget pack
重新打包nuget包。在安装这个新版本的 nuget 包之前,请 clean nuget caches first 或删除 C:\Users\xxx(current user name)\.nuget\packages
.
在我这边效果很好。
我的 nuget 包名为 testt
,我在 x64
下引用了 ClassLibrary21.dll
。