让 NuGet 包输出文件

Vac*_*ano 1 c# nuget .net-core visual-studio-2019 .net-core-3.1

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

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

但是,当我将其打包到 NuGet 并将其拉入另一个解决方案/项目时,该SwaggerIndex.html文件不会在构建时输出。

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

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

Mr *_*ian 5

请尝试这些:

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

解决方案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>
Run Code Online (Sandbox Code Playgroud)

2)然后重新打包你的nuget项目,在安装新版本之前,你应该先清理nuget缓存或者直接删除下面的所有缓存文件C:\Users\xxx(current user)\.nuget\packages

解决方案2

如果您希望此 nuget 包在和项目中复制SwaggerIndex.html文件,您应该使用以下命令:Net FrameworkNet Core

1)在你的nuget项目中添加一个名为file的文件<package_id>.props。您应该注意,如果您的 nuget 包名为SwaggerIndex.1.0.0.nupkg,您应该将文件命名为SwaggerIndex.propsfile ,以便它可以工作。

在我这边,我将其放入一个名为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>
Run Code Online (Sandbox Code Playgroud)

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

<ItemGroup>
        <None Include="SwaggerIndex.html" Pack="true" PackagePath="File"></None>
        <None Include="build\SwaggerIndex.props" Pack="true" PackagePath="build"></None>   
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

4)然后重新打包你的nuget包,在安装这个新版本的nuget包之前,你应该先清理所有nuget缓存

安装完新版本的 nuget 包后,单击“Build”,该文件将被复制到主项目中。

在此输入图像描述

除此之外,还有一个类似的问题

  • `PackageCopyToOutput` 是我缺少的部分!谢谢你! (2认同)