C# ASP.NET核心:在发布时排除或包含文件

C# ASP.NET核心:在发布时排除或包含文件,c#,asp.net,asp.net-core,visual-studio-2017,C#,Asp.net,Asp.net Core,Visual Studio 2017,在project.json文件上有aspdotnet1.0include/exclude节 { "exclude": [ "node_modules", "bower_components" ], "publishExclude": [ "**.xproj", "**.user", "**.vspscc" ] } ASP.NET Core 1.1(没有project.json)中的这一部分在哪里? .csproj文件或.pubxml上是否

project.json
文件上有
aspdotnet1.0
include/exclude节

{
  "exclude": [
    "node_modules",
    "bower_components"
  ],
  "publishExclude": [
    "**.xproj",
    "**.user",
    "**.vspscc"
  ]
}
ASP.NET Core 1.1(没有
project.json
)中的这一部分在哪里?
.csproj
文件或
.pubxml
上是否有类似的部分?

编辑.csproj文件以手动排除发布的文件/文件夹。

你也可以参考

有关web部署,请参阅

project.json
现在已被
csproj
取代。你可以在网上更多地了解它

对于升级现有的.NET Core 1.0项目或使用.NET Core 1.1,您可以阅读

From:例如,如果您希望指定要随应用程序发布的某些文件,您仍然可以使用
csproj
中的已知机制(例如
元素)

ItemGroup
有一个
copytoppublishdirectory
属性,用于确定是否将文件复制到发布目录,该属性可以具有以下值之一:

  • 总是
  • 保存最新
  • 从来没有
注意,输出文件夹也有类似的
CopyToOutputDirectory
属性

示例(来自):




如果您对
project.json-.csproj
迁移如何使用
CopyToPublishDirectory
属性迁移发布选项感兴趣,您可以在dotnet cli repo中查看类。

在Visual Studio 2017 15.3之后

编辑.csproj文件以手动排除要发布的文件/文件夹

<ItemGroup>
  <Content Remove="src\**" />
  <Content Remove="node_modules\**" />
</ItemGroup>


ref:

我注意到我的文件夹中有几个文件没有被发布-我尝试右键单击项目中的文件夹,查看是否可以选择一个选项将文件夹包含在部署中-它不在那里,但我确实找到了我是否选择文件夹中的文件并将其标记为部署时复制,它将复制文件并在此过程中创建文件夹


如果文件夹中有文件,这会有所帮助,但如果文件夹为空,则不会有帮助

使用Visual Studio 2017(在15.6.5中测试),您可以在解决方案资源管理器中的文件上单击鼠标右键,然后将构建操作设置为

它将更新您的
.csproj
文件,如下所示:

<ItemGroup>
  <Content Remove="appsettings.Development.json" />
  <Content Remove="appsettings.json" />
  <Content Remove="npm-shrinkwrap.json" />
  <Content Remove="package.json" />
  <Content Remove="tsconfig.json" />
</ItemGroup>

<ItemGroup>
  <None Include="appsettings.Development.json" />
  <None Include="appsettings.json" />
  <None Include="npm-shrinkwrap.json" />
  <None Include="package.json" />
  <None Include="tsconfig.json" />
</ItemGroup>


希望这会有所帮助。

.csproj
中,对于Visual Studio 15.3版及更高版本,这会使文件在Visual Studio中保持可见(而“内容删除”不会),并防止文件被发布

<ItemGroup>
    <Content Update="appsettings*.json" CopyToPublishDirectory="Never" />
</ItemGroup>

在我的情况下,我需要在调试期间在本地使用local.settings.json,但我不希望在发布版本或发布期间将其包含在我的WebDeploy zip文件中:

  <ItemGroup>
    <Content Include="..\local.settings.json" Link="local.settings.json" Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="..\local.settings.json" Link="local.settings.json" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

保存最新
从未

**

对于Visual Studio 2019,我使用以下代码成功地从发布输出中排除了名为“dummy”的wwwroot子文件夹(包括“dummy”的所有子文件夹):

<ItemGroup>
  <Content Update="wwwroot\dummy\**\*">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </Content>
</ItemGroup>

从未

注意:要求将wwwroot及其子文件夹包含在项目中,但仅在发布时排除。

在Visual Studio 2019中

  • 右键单击文件->属性
  • 复制到输出目录->始终复制
  • 保存解决方案并尝试发布

  • 要在发布时排除文件,请编辑您的发布文件,例如
    FolderProfile.pubxml
    ,并添加下面所示的适当XML元素以包括/排除文件和文件夹

    
    文件系统
    文件系统
    释放
    任何CPU
    真的
    假的
    afa9f185-7ce0-4935-9da1-ab676229d68a
    bin\Release\PublishOutput
    假的
    wwwroot\ReadMe2.md
    保存最新
    

    另请参见:

    是的,我知道csproj而不是project.json,但include/exclude secion在哪里?更新了我的答案。MigratePublishShoptionRule链接已失效。此答案适用于Visual Studio 2017 15.3之前的project。请参阅@Wagner Pereira以了解最新项目。我已保留最新项目。我从不希望在发布过程中复制readme.html,但它没有这样做。这是目前有效的解决方案。CopyToPublishDirectory或CopyToOutputDirectory在15.3之后根本不起作用。这对我很有帮助。这是一个比公认答案更好的解决方案!请注意“更新”属性,以便您可以将其应用于默认情况下已包含在项目中的文件,因为它们位于根文件夹下。这也适用于VS2019,版本16.0.0(刚刚测试)适用于我。此处参考:确认此功能仍然有效。尝试了上述所有方法,但均无效,但此方法无效。在为vs2019找到相同的解决方案后,我刚刚看到了您的答案。因此,我只想添加以下信息:此解决方案也适用于vs2019(并且是防止文件在IMHO中发布的最佳且最简单的方法)。
    <ItemGroup>
      <Content Update="wwwroot\dummy\**\*">
        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
      </Content>
    </ItemGroup>