让 NuGet 包输出一个文件

Have a NuGet package output a file

我有一个 Visual Studio 项目,我已经制作成 NuGet 包。该项目中有一个文件(名为 SwaggerIndex.html)。我已经将该文件设置为将“复制到输出目录”属性 设置为“如果更新则复制”。 (我需要在构建时将此文件复制到构建文件夹。)

在那个解决方案中它工作得很好。 (我创建了另一个项目来测试它,当它引用我的具有 SwaggerIndex.html 的项目时,它会很好地将它输出到构建文件夹。)

但是,当我将其打包到一个 NuGet 并将其拉入另一个 solution/project 时,SwaggerIndex.html 文件不会在构建时输出。

我正在通过转到项目的“包”属性选项卡并选择“在构建时生成 NuGet 包”来制作我的 NuGet 包。所有涉及的项目都是运行.Net Core 3.1.

如何让我的 NuGet 包在构建时创建我的 SwaggerIndex.html 文件(就像它只是一个普通项目时一样)?

请试试这些:

我有两种解决方案供您解决问题。

解决方案 1

如果你只想在新的 sdk 项目(Net CoreNet Standard 项目)中安装这个 nuget 包,你可以使用这个

1) 在您的 xxx.csproj 文件中添加这些节点:

<ItemGroup>
    <None Include="xxx\SwaggerIndex.html(the path of SwaggerIndex.html file in your project)" Pack="true" PackagePath="contentFiles\any\any">
        <PackageCopyToOutput>true</PackageCopyToOutput>
    </None>
</ItemGroup>

2)然后重新打包你的nuget项目,在你安装新版本之前,你应该先clean nuget caches first或者直接删除[=16=下的所有缓存文件]

解决方案 2

如果你想让这个 nuget 包在 Net FrameworkNet Core 项目中复制 SwaggerIndex.html 文件,你应该使用这个:

1) 在你的 nuget 项目中添加一个名为 <package_id>.props 的文件。你应该注意,如果你的 nuget 包命名为 SwaggerIndex.1.0.0.nupkg,你应该将文件命名为 SwaggerIndex.props 文件,这样它才能工作。

在我这边,我把它放到了一个叫build.

的文件夹里

2)然后在SwaggerIndex.props文件中添加这些内容,

<Project>
    <Target Name="CopyToOutputFolder" BeforeTargets="Build">
        <ItemGroup>
            <File Include="$(MSBuildThisFileDirectory)..\File\*.*"></File>
        </ItemGroup>
        <Copy SourceFiles="@(File)" DestinationFolder="$(TargetDir)"></Copy>
    </Target>
</Project>

3) 将这些添加到您的 nuget 项目的 xxx.csproj 文件中。

<ItemGroup>
        <None Include="SwaggerIndex.html" Pack="true" PackagePath="File"></None>
        <None Include="build\SwaggerIndex.props" Pack="true" PackagePath="build"></None>   
</ItemGroup>

4) 然后重新打包你的 nuget 包,在安装这个新版本的 nuget 包之前,你应该 first clean all nuget caches first.

当你完成安装新版本的 nuget 包后,点击 Build 文件将被复制到主项目中。

除此之外,还有这个。