C# 使用dotnet Pack将多个平台打包到一个包中

C# 使用dotnet Pack将多个平台打包到一个包中,c#,.net,nuget,platform,pack,C#,.net,Nuget,Platform,Pack,我想创建一个NuGet包,其中包含两个具有不同平台(x86和x64)的版本 通过使用“nuget.exe MyProject.nuspec”,我找到了一个解决方案。但是,由于我的项目有许多依赖项,因此手动编写.nuspec非常复杂,并且容易出错 更干净的方法是使用“dotnetpackmyproject.csproj”。所有依赖项都将自动添加。我目前的做法如下: msbuild MyProject.csproj -p:Configuration=Release -p:Platform="

我想创建一个NuGet包,其中包含两个具有不同平台(x86和x64)的版本

通过使用“nuget.exe MyProject.nuspec”,我找到了一个解决方案。但是,由于我的项目有许多依赖项,因此手动编写.nuspec非常复杂,并且容易出错

更干净的方法是使用“dotnetpackmyproject.csproj”。所有依赖项都将自动添加。我目前的做法如下:

msbuild MyProject.csproj -p:Configuration=Release -p:Platform="x86"
msbuild MyPeoject.csproj -p:Configuration=Release -p:Platform="x64"

dotnet pack MyProject.csproj -c Release -p:Platform="x86" --no-build -o ./
dotnet pack MyProject.csproj -c Release -p:Platform="x64" --no-build -o ./
msbuild MyProject.csproj -p:Configuration=Release -p:Platform="x86"
msbuild MyPeoject.csproj -p:Configuration=Release -p:Platform="x64"

dotnet pack MyProject.csproj -c Release -p:Platform="x86|x64" --no-build -o ./
结果是一个包,包含x64构建(我猜x86被x64覆盖)

我要找的是这样的东西:

msbuild MyProject.csproj -p:Configuration=Release -p:Platform="x86"
msbuild MyPeoject.csproj -p:Configuration=Release -p:Platform="x64"

dotnet pack MyProject.csproj -c Release -p:Platform="x86" --no-build -o ./
dotnet pack MyProject.csproj -c Release -p:Platform="x64" --no-build -o ./
msbuild MyProject.csproj -p:Configuration=Release -p:Platform="x86"
msbuild MyPeoject.csproj -p:Configuration=Release -p:Platform="x64"

dotnet pack MyProject.csproj -c Release -p:Platform="x86|x64" --no-build -o ./

是否有理由将两个版本打包到一个包中?

如果目标是多个平台,则需要手动将配置添加到csproj中。此配置包含要添加到nuget包中的dll的源路径以及nuget包中的目标文件夹

将此项目组添加到您的csproj:

<ItemGroup>
    <None Include="bin\x64\Release\net48\MyProject.dll" Pack="true" PackagePath="build\net48\x64\MyProject.dll" />
    <None Include="bin\x86\Release\net48\MyProject.dll" Pack="true" PackagePath="build\net48\x86\MyProject.dll" />
</ItemGroup>
dotnet build MyProject.csproj -c=Release /p:Platform=x64 --no-incremental
dotnet build MyProject.csproj -c=Release /p:Platform=x86 --no-incremental
dotnet pack MyProject.csproj --no-build -c=Release -o=./