ASP.NET Core:发布时排除或包含文件

问题描述 投票:0回答:13

之前有

aspdotnet1.0
包含/排除
project.json
文件中的部分

{
  "exclude": [
    "node_modules",
    "bower_components"
  ],
  "publishExclude": [
    "**.xproj",
    "**.user",
    "**.vspscc"
  ]
}

ASP.NET Core 1.1 中的这个部分在哪里(没有

project.json
)?
.csproj
文件或
.pubxml
上是否有类似的部分?

c# asp.net asp.net-core visual-studio-2017
13个回答
135
投票

来自 documentation:例如,如果您希望指定一些要与您的应用程序一起发布的文件,您仍然可以使用

csproj
中的已知机制(例如,
<Content>
元素)。

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

  • 永远,
  • 保留最新
  • 从来没有

注意,输出文件夹也有类似的

CopyToOutputDirectory
属性。

示例(来自此处):

<ItemGroup>

  <None Include="notes.txt" CopyToOutputDirectory="Always" />
  <!-- CopyToOutputDirectory = { Always, PreserveNewest, Never } -->

  <Content Include="files\**\*" CopyToPublishDirectory="PreserveNewest" />
  <None Include="publishnotes.txt" CopyToPublishDirectory="Always" />
  <!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } -->
</ItemGroup>

如果您对

project.json -.csproj
迁移如何使用
CopyToPublishDirectory
属性来迁移发布选项感兴趣,您可以查看 dotnet cli 存储库中的 MigratePublishOptionsRule 类。


76
投票

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

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

要排除文件夹的内容,您需要编写:

<!-- Excluding the ClientApp folder. -->
<Content Update="ClientApp\**" CopyToPublishDirectory="Never" />

39
投票

Visual Studio 2017 15.3 之后

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

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

参考:https://www.danielcrabtree.com/blog/273/fixing-the-duplicate-content-error-after-upgrading-visual-studio-2017


23
投票

使用 Visual Studio 2017(在 15.6.5 中测试),您可以在 Solution Explorer 中右键单击该文件,并将 Build Action 设置为 None

它将更新您的

.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>

希望这有帮助。


18
投票

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

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

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


12
投票

要在发布时排除文件,请编辑您的发布文件,例如

FolderProfile.pubxml
,并添加如下所示的适当 XML 元素以包含/排除文件和文件夹。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <PublishFramework />
    <ProjectGuid>afa9f185-7ce0-4935-9da1-ab676229d68a</ProjectGuid>
    <publishUrl>bin\Release\PublishOutput</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>
  <ItemGroup>

    <!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } -->

    <!-- Copying a file located outside of the project into the published site's wwwroot folder. -->
    <ResolvedFileToPublish Include="..\ReadMe2.md">
      <RelativePath>wwwroot\ReadMe2.md</RelativePath>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </ResolvedFileToPublish>

    <!-- Excluding the wwwroot\Content folder. -->
    <Content Update="wwwroot\Content\**\*" CopyToPublishDirectory="Never" />

    <!-- Excluding the Views\Home\About2.cshtml file. -->
    <Content Update="Views\Home\About2.cshtml" CopyToPublishDirectory="Never" />
  </ItemGroup>
</Project>

另请参阅:Visual Studio 发布配置文件 - 选择性文件包含


6
投票

@Craig Wilson 的解决方案非常适合与 Visual Studio 2022 和 Core 6 一起发布

以下是当您在系统级别设置环境变量(如 ASPNETCORE_ENVIRONMENT=QA)时排除除 appsettings.json 和 appsetting.QA.json 之外的所有 appsettings 的示例

在 Windows 中,您还可以在用于运行 dotnet pubish 命令的同一 powershell 中动态设置环境变量。

$env:ASPNETCORE_ENVIRONMENT = 'QA'

当您关闭 powershell 时,该变量将被删除

    <!-- Publish Settings -->
    <ItemGroup>
        <Content Update="appsettings.*.json">
        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
        </Content>  
        <Content Update="appsettings.$(ASPNETCORE_ENVIRONMENT).json">
        <CopyToPublishDirectory>Always</CopyToPublishDirectory>
        </Content>  
        <Content Update="appsettings.$(ASPNETCORE_ENVIRONMENT).json">
        <CopyToPublishDirectory>Always</CopyToPublishDirectory>
        </Content>      
    </ItemGroup>   

请注意,在 Visual studio 2022 中默认包含所有文件,您只需要使用更新


4
投票

就我而言,我在调试期间需要本地 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>

**


3
投票

我注意到我的包含一些文件的文件夹没有被发布 - 我尝试右键单击项目中的文件夹,看看是否可以选择一个选项来将该文件夹包含在部署中 - 它不在那里,但我确实找到了如果我选择文件夹内的文件并将它们标记为在部署时复制,它将复制这些文件并在此过程中创建它们的文件夹。 如果您的文件夹有文件,这会有所帮助,但如果您的文件夹为空,则没有帮助。


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

您也可以参考

这个

有关 Web 部署,请参阅

https://blogs.msdn.microsoft.com/webdev/2010/04/22/web-deployment- except-files-and-folders-via-the-web-applications-project-file/

.

project.json

现已替换为

csproj
。您可以在
https://www.stevejgordon.co.uk/project-json-replaced-by-csproj
上阅读更多信息。 要升级现有的 .NET Core 1.0 项目或使用 .NET Core 1.1,您可以阅读

https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-net-core-1-1 /

.


2
投票
在 Visual Studio 2019 中

右键单击文件 -> 属性
  1. 复制到输出目录->始终复制

保存解决方案并尝试发布

0
投票

<ItemGroup> <None Update="StaticContent\**"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup>



-2
投票

转到“解决方案资源管理器”中文件的“属性”
  1. 将“复制到输出目录”属性更改为所需的值(“始终复制”、“不复制”、“如果较新则复制”)。
© www.soinside.com 2019 - 2024. All rights reserved.