【问题标题】:Visual Studio incorrectly packs wwwroot in NuGet packageVisual Studio 错误地将 wwwroot 打包到 NuGet 包中
【发布时间】:2018-05-12 07:14:49
【问题描述】:

我目前正在利用较新的 Visual Studio 2017 工具从 *.xprojproject.json 格式升级到 *.csproj 文件格式。以下是我为 IDE 和 SDK / .NET Core CLI 使用的版本:

Visual Studio 版本

Microsoft Visual Studio Community 2017 
Version 15.4.3
VisualStudio.15.Release/15.4.3+27004.2008
Microsoft .NET Framework
Version 4.7.02558

SDK / .NET Core CLI

.NET Command Line Tools (2.0.2)

Product Information:
 Version:            2.0.2
 Commit SHA-1 hash:  a04b4bf512

Runtime Environment:
 OS Name:     Windows
 OS Version:  6.3.9600
 OS Platform: Windows
 RID:         win81-x64
 Base Path:   C:\Program Files\dotnet\sdk\2.0.2\

Microsoft .NET Core Shared Framework Host

  Version  : 2.0.0
  Build    : e8b8861ac7faf042c87a5c2f9f2d04c98b69f28d

话虽如此,我很好奇如何从不依赖.nuspec 创建的 NuGet 包中排除wwwroot。这可能吗?

.csproj

这是我的.csproj

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

  <PropertyGroup>        
    <!-- omitted for brevity -->
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="wwwroot\**\*;node_modules" />
    <EmbeddedResource Include="Views\**" Exclude="bin\**;obj\**;**\*.xproj;packages\**;@(EmbeddedResource)" />
    <None Update="NLog.config">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <PackagePath>lib/net461/</PackagePath>
      <Pack>true</Pack>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>
    <None Update="wwwroot\**\*">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>
  </ItemGroup>

  <ItemGroup>
    <!-- package references, omitted for brevity -->
  </ItemGroup>

</Project>

包装内容

这是包装内容的图片:

理想情况下,我希望内容类似于排除contentcontentFiles 位,而只是成为lib.exe

【问题讨论】:

  • 您真的要打包可执行文件吗?你想建立一个图书馆吗?默认情况下,使用 web sdk 的项目不打包,因为对于 web 项目并没有很好的可重用性故事。如果您想创建一个库,请从 SDK 中删除 .Web - 这也会删除内容项(如果您真的想打包可执行文件,您仍然可以使用 msbuild 项更新将它们从打包中排除)
  • 是的,我想打包.exe,我想排除wwwroot。我们目前有一个主机可执行文件,它使用其他 exe,将它们加载到主机应用程序域中并公开它们的 Web API 端点 - 以便我们可以动态共享主机。更改 SDK 位有什么缺点?
  • 公开你的意思是转发请求或负载控制器?然后它更像是一个库。没有 web sdk,你将失去 vs 启动设置、web 发布方法和这些修改的项目项默认值(content/none/wwwroot)

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


【解决方案1】:

您可以修改项目文件中的内容项,将 wwwroot 文件夹或所有内容项的 Pack 元数据设置为 false

<ItemGroup>
  <!-- only exclude wwwroot items from package -->
  <Content Update="wwwroot/**" Pack="false" />

  <!-- Exclude all content from package (e.g. appsettings.json) -->
  <Content Update="@(Content)" Pack="false" />
</ItemGroup>

【讨论】:

猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2014-06-25
  • 1970-01-01
  • 2019-08-12
相关资源
最近更新 更多