【问题标题】:Have a NuGet package output a file让 NuGet 包输出文件
【发布时间】:2021-01-29 12:22:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# .net-core nuget visual-studio-2019 .net-core-3.1


    【解决方案1】:

    请试试这些:

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

    解决方案 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或者干脆删除C:\Users\xxx(current user)\.nuget\packages下的所有缓存文件

    解决方案 2

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

    1) 在您的 nuget 项目中添加一个名为 &lt;package_id&gt;.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,文件将被复制到主项目中。

    另外还有a similar issue关于这个的。

    【讨论】:

    • PackageCopyToOutput 是我缺少的部分!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多