ASP.NET 核心:在发布时排除或包含文件
ASP.NET Core: Exclude or include files on publish
在 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 文件以手动将 files/folder 排除在发布之外。
也可以参考this
对于 Web 部署,请参阅 https://blogs.msdn.microsoft.com/webdev/2010/04/22/web-deployment-excluding-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/。
From documentation: if you wish to specify, for example, some files to get published with your app, you can still use the known mechanisms in csproj
for that (for example, the <Content>
element).
ItemGroup
elements有一个CopyToPublishDirectory
属性,决定是否将文件复制到发布目录,可以有以下值之一:
- 总是,
- 保留最新
- 从不
请注意,输出文件夹也有类似的 CopyToOutputDirectory
属性。
示例(来自 here):
<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之后 2017 15.3
编辑 .csproj 文件以手动排除 files/folder 发布
<ItemGroup>
<Content Remove="src\**" />
<Content Remove="node_modules\**" />
</ItemGroup>
我注意到我的文件夹中有一些文件没有被发布 - 我尝试右键单击项目中的文件夹以查看我是否可以 select 一个将文件夹包含在部署中的选项 -它不在那里,但我确实发现如果我 select 文件夹中的文件并将它们标记为在部署时复制,它将复制文件 和 在此过程中创建它们的文件夹.
如果您的文件夹中有文件,这会有所帮助,但如果您的文件夹为空,则没有帮助。
用Visual Studio2017(在15.6.5测试过),可以在解决方案资源管理器[=22]中右击文件=] 并将 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 版本 15.3 及更高版本的 .csproj
中,这使文件在 Visual Studio 中可见(而 "Content Remove" 不可见),并防止文件被已发布。
<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,
- Right-click 文件 -> 属性
- 复制到输出目录-> 始终复制
- 保存解决方案并尝试发布
要在发布时排除文件,请编辑您的发布文件,例如FolderProfile.pubxml
,并将如下所示的适当 XML 元素添加到 include/exclude 文件和文件夹。
<?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 publish profiles - Selective file inclusion
Visual Studio 2019:
- 在“解决方案资源管理器”中转到文件的“属性”
- 将“复制到输出目录”属性更改为所需的值(“始终复制”、“不复制”、“如果更新则复制”)。
2022 年 visual studio:
卸载csproj,打开文件
要添加内容和子文件夹,请插入:
<ItemGroup>
<None Update="StaticContent\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
来自@Craig Wilson 的解决方案非常适合与 Visual Studio 2022 和 Core 6
一起发布
以下示例排除了除 appsettings.json 之外的所有应用程序设置以及 appsetting.QA.json 当您在系统级别设置环境变量时 ASPNETCORE_ENVIRONMENT=QA[=11] =]
在 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 年默认包含所有文件,您只需要使用更新
在 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 文件以手动将 files/folder 排除在发布之外。
也可以参考this
对于 Web 部署,请参阅 https://blogs.msdn.microsoft.com/webdev/2010/04/22/web-deployment-excluding-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/。
From documentation: if you wish to specify, for example, some files to get published with your app, you can still use the known mechanisms in
csproj
for that (for example, the<Content>
element).
ItemGroup
elements有一个CopyToPublishDirectory
属性,决定是否将文件复制到发布目录,可以有以下值之一:
- 总是,
- 保留最新
- 从不
请注意,输出文件夹也有类似的 CopyToOutputDirectory
属性。
示例(来自 here):
<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之后 2017 15.3
编辑 .csproj 文件以手动排除 files/folder 发布
<ItemGroup>
<Content Remove="src\**" />
<Content Remove="node_modules\**" />
</ItemGroup>
我注意到我的文件夹中有一些文件没有被发布 - 我尝试右键单击项目中的文件夹以查看我是否可以 select 一个将文件夹包含在部署中的选项 -它不在那里,但我确实发现如果我 select 文件夹中的文件并将它们标记为在部署时复制,它将复制文件 和 在此过程中创建它们的文件夹.
如果您的文件夹中有文件,这会有所帮助,但如果您的文件夹为空,则没有帮助。
用Visual Studio2017(在15.6.5测试过),可以在解决方案资源管理器[=22]中右击文件=] 并将 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 版本 15.3 及更高版本的 .csproj
中,这使文件在 Visual Studio 中可见(而 "Content Remove" 不可见),并防止文件被已发布。
<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,
- Right-click 文件 -> 属性
- 复制到输出目录-> 始终复制
- 保存解决方案并尝试发布
要在发布时排除文件,请编辑您的发布文件,例如FolderProfile.pubxml
,并将如下所示的适当 XML 元素添加到 include/exclude 文件和文件夹。
<?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 publish profiles - Selective file inclusion
Visual Studio 2019:
- 在“解决方案资源管理器”中转到文件的“属性”
- 将“复制到输出目录”属性更改为所需的值(“始终复制”、“不复制”、“如果更新则复制”)。
2022 年 visual studio: 卸载csproj,打开文件 要添加内容和子文件夹,请插入:
<ItemGroup>
<None Update="StaticContent\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
来自@Craig Wilson 的解决方案非常适合与 Visual Studio 2022 和 Core 6
一起发布以下示例排除了除 appsettings.json 之外的所有应用程序设置以及 appsetting.QA.json 当您在系统级别设置环境变量时 ASPNETCORE_ENVIRONMENT=QA[=11] =]
在 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 年默认包含所有文件,您只需要使用更新