我正在尝试使用内置的nuget软件包构建工具通过Visual Studio创建一个nupkg,并将我项目中的构建目录包含在nupkg中。看来这应该是一个相当简单的任务,但我无法使其正常工作。通过我的谷歌搜索,可以将其中任何一个添加到我的csproj文件中,但是两者都在nupkg中创建了一个空的“ build”目录:
<ItemGroup>
<None Include="build\**">
<Pack>true</Pack>
<PackagePath>build\</PackagePath>
<IncludeInPackage>true</IncludeInPackage>
</None>
</ItemGroup>
在我的nuspec中使用nuget pack
创建包含以下内容的程序包确实可行:
<files>
<!-- Include everything in \build -->
<file src="build\**" target="build" />
</files>
答案 0 :(得分:1)
使用Visual Studio Pack将构建目录包含在nuget软件包中
根据文档Including content in a package,应使用属性<Pack>true</Pack>
和<PackagePath>build\</PackagePath>
:
如果您要将所有内容仅复制到一个特定的根文件夹(而不是同时复制content和contentFiles),则可以使用MSBuild属性ContentTargetFolders,该属性默认为“ content; contentFiles”,但可以设置为其他任何文件夹名称。
PackagePath
可以是用分号分隔的目标路径集。 指定空的软件包路径会将文件添加到 包。
因此,您可以按以下方式更改ItemGroup:
<ItemGroup>
<None Include="build\**" Pack="True" PackagePath="build\" />
</ItemGroup>
更新:
我相信这与我添加的内容相同,但是使用不同的XML 结构且没有Pack属性
Pack
属性是关键点。它可以很好地与您的XML结构和Pack属性一起使用。您应确保文件位于项目文件夹的文件夹中:内部版本:
在下面查看我的测试演示:
Update2:
啊!您正在使用.net framework
项目!就是这个问题的原因。默认情况下,此方法用于.net standard
和.net core
项目,不适用于.net framework
。要解决此问题,您必须使用.nupsec
文件,就像您在问题中发帖一样。
如果您仍想使用Visual Studio Pack 将构建目录包含在nuget软件包中,则需要将项目类型更改为 SDK 类型:
检查this document了解更多详细信息。
然后您可以使用我们之前讨论过的方法。
希望这会有所帮助。
答案 1 :(得分:0)
此问题的解决方案是upgrade the project to SDK type(默认情况下,Xamarin绑定项目使用旧格式,但似乎可以使用新类型),然后使用:
<ItemGroup>
<None Update="build\**">
<IncludeInPackage>true</IncludeInPackage>
</None>
</ItemGroup>
包括构建目录。替代方法是使用nuget pack
。
转换项目时,请确保保留Xamarin导入:
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />
以下是我的项目文件的外观:
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<PropertyGroup>
<PackageId></PackageId>
<PackageVersion>3.3.2</PackageVersion>
<ReleaseVersion>$(PackageVersion)</ReleaseVersion>
<AssemblyVersion>$(PackageVersion)</AssemblyVersion>
<Authors>Nick Brook</Authors>
<Description></Description>
<Copyright></Copyright>
<PackageProjectUrl></PackageProjectUrl>
<Summary></Summary>
<PackageTags></PackageTags>
<Title></Title>
<PackageReleaseNotes>Initial Release</PackageReleaseNotes>
<OutputType>Library</OutputType>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
<OutputPath>bin\$(Configuration)</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<PackageOutputPath>packed</PackageOutputPath>
<PackOnBuild>true</PackOnBuild>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="Xamarin.iOS" />
</ItemGroup>
<ItemGroup>
<ObjcBindingApiDefinition Include="ApiDefinition.cs" />
</ItemGroup>
<ItemGroup>
<ObjcBindingCoreSource Include="Structs.cs" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Structs.cs" Condition=" '$(EnableDefaultCompileItems)' == 'true' " />
<Compile Remove="ApiDefinition.cs" Condition=" '$(EnableDefaultCompileItems)' == 'true' " />
</ItemGroup>
<ItemGroup>
<None Remove="packed\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Build.Download" Version="0.4.11" />
<PackageReference Include="NuGet.Build.Packaging" Version="0.2.2" />
</ItemGroup>
<ItemGroup>
<None Update="build\**">
<IncludeInPackage>true</IncludeInPackage>
</None>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />
</Project>