【问题标题】:.Net Core Nuget Package - Copy files to package consumer wwwroot.Net Core Nuget 包 - 将文件复制到包消费者 wwwroot
【发布时间】:2019-08-12 17:46:29
【问题描述】:

我有一个 .Net Core 2.2 库项目。这个项目包含的只是一堆静态文件,它们将“构建操作”设置为内容。

此项目的唯一目的是构建到 Nuget 包中,并且任何消费者都可以将包含的内容添加到他们的 wwwroot 文件夹中。

不幸的是,在查看解决方案资源管理器时,这些文件“看起来”就好像它们在那里一样,但它们的实际路径是:

C:\Users\MyName\.nuget\package\mylib.staticfiles\0.0.1\contentFiles\any\netcoreapp2.2\wwwroot.

在我的库中,我在 .csproj 文件中使用以下内容:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <PackageVersion>0.0.6</PackageVersion>
  </PropertyGroup>
  <ItemGroup>
    <Content Include="wwwroot\**" />
  </ItemGroup>

</Project>

很难找到有关如何执行此操作的文档。任何帮助表示赞赏。

【问题讨论】:

  • 改用 Razor 类库。然后,您实际上可以将静态资源嵌入到库本身中。它们仍然不会包含在目标项目中。 (虽然这是最好的)。如果消费者想要更改或修改静态文件,他们只需在项目的同一位置创建一个具有相同名称的文件,并将其用作覆盖。您的方法的问题在于,对 NuGet 包的任何更新都会破坏项目中的任何更改,而使用 RCL,消费者仍然可以控制。

标签: asp.net-core .net-core nuget


【解决方案1】:

是的,它不工作。新方法是链接文件。曾经被复制到目标项目的静态内容和代码文件。但它不再受支持。它被认为是“污染”项目。 有办法破解它并不完美但有效。检查我的答案here

希望对你有帮助。

【讨论】:

    【解决方案2】:

    在您的 nuget 项目根文件夹中创建一个名为 YourProjectName.targets 的文件,其内容如下:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
       <Target Name="CopyScriptsToProject" BeforeTargets="Build">
          <Message Text="Copying wwwroot to your project.." />  
             <ItemGroup>
                <SourceScripts Include="$(MSBuildThisFileDirectory)..\staticwebassets\**\*.*"/>
             </ItemGroup>
             <Copy 
                SourceFiles="@(SourceScripts)"
                DestinationFiles="@(SourceScripts -> '$(MSBuildProjectDirectory)\wwwroot\%(RecursiveDir)%(Filename)%(Extension)')"
                Condition="!Exists('$(MSBuildProjectDirectory)\wwwroot\%(RecursiveDir)%(Filename)%(Extension)')"
             />
       </Target> 
    </Project>
    

    在您的项目文件 (.cproj) 中添加以下内容:

      <ItemGroup>
        <Content Include="YourProjectName.targets" PackagePath="build/YourProgectName.targets" />   
      </ItemGroup>
    

    构建并打包您的 nuget 项目。将 nuget 安装到项目 B。现在构建项目 B,您将在项目 B wwwroot 中找到来自 nuget wwwroot 的所有文件。

    【讨论】:

      猜你喜欢
      • 2019-01-28
      • 2018-05-12
      • 2017-08-09
      • 2018-10-22
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      相关资源
      最近更新 更多