簡體   English   中英

ASP.NET 內核:在發布時排除或包含文件

[英]ASP.NET Core: Exclude or include files on publish

project.json文件中有aspdotnet1.0之前包含/排除部分

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

ASP.NET Core 1.1(沒有project.json )中的這個部分在哪里? .csproj文件或.pubxml上是否有類似的部分?

來自文檔:例如,如果您希望指定一些文件與您的應用程序一起發布,您仍然可以使用csproj中的已知機制(例如, <Content>元素)。

ItemGroup元素有一個CopyToPublishDirectory屬性,該屬性確定是否將文件復制到發布目錄,並且可以具有以下值之一:

  • 總是,
  • 保留最新
  • 絕不

請注意,output 文件夾也有類似的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 repo 中的MigratePublishOptionsRule class。

在 Visual Studio 15.3 及更高版本的.csproj中,這使文件在 Visual Studio 中可見(而“內容刪除”則不可見),並防止文件被發布。

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

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

使用Visual Studio 2017 (在 15.6.5 中測試),您可以右鍵單擊解決方案資源管理器中的文件並將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>

希望這可以幫助。

對於 Visual Studio 2019,我設法使用以下代碼從發布 output 中排除了名為“dummy”的 wwwroot 子文件夾(包括“dummy”的所有子文件夾):

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

注意:要求是在項目中保留 wwwroot 及其子文件夾,但在發布時排除。

要在發布時排除文件,請編輯您的發布文件,例如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 發布配置文件 - 選擇性文件包含

在我的情況下,我在調試期間需要本地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>

**

我注意到我的包含一些文件的文件夾沒有被發布-我嘗試右鍵單擊項目中的文件夾以查看是否可以 select 選擇將文件夾包含在部署中-它不存在,但我確實找到了我 select 文件夾內的文件並將它們標記為在部署時復制,它將復制文件在此過程中創建它們的文件夾。

如果您的文件夾中有文件,這會有所幫助,但如果您的文件夾為空,則無濟於事。

編輯 .csproj 文件以手動排除文件/文件夾的發布。

你也可以參考這個

對於 web 部署,請參閱https://blogs.msdn.microsoft.com/webdev/2010/04/22/web-deployment- exclude -files-and-folders-via-the-web-applications-project-file/。

project.json現在已被csproj取代。 您可以在https://www.stevejgordon.co.uk/project-json-replaced-by-csproj上了解更多信息。

For Upgrading Existing .NET Core 1.0 Projects or for using Using .NET Core 1.1 you can read https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-net-core-1-1/ .

@Craig Wilson 的解決方案非常適合與 Visual Studio 2022 和 Core 6 一起發布

以下是排除除 appsettings.json 之外的所有 appsettings 的示例,當您在系統級別設置環境變量(如 ASPNETCORE_ENVIRONMENT=QA

在 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 中默認包含所有文件,您只需要使用更新

在 Visual Studio 2019中,

  1. 右鍵單擊文件-> 屬性
  2. 復制到 Output 目錄-> 始終復制

在此處輸入圖像描述

  1. 保存解決方案並嘗試發布

視覺工作室 2019:

  1. Go 到“解決方案資源管理器”中文件的“屬性”
  2. 將“復制到 Output 目錄”屬性更改為所需的值(“始終復制”、“不要復制”、“如果更新則復制”)。

在 Visual Studio 2022 中:卸載 csproj,打開文件要添加內容和子文件夾,插入:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM