【发布时间】:2019-06-09 06:42:04
【问题描述】:
我正在尝试复制文件夹的内容以构建输出。理想情况下,在相对于输出/发布文件夹的相同路径下。我有:
<!-- front-end files to serve -->
<ItemGroup>
<Folder Include="Frontend\Content">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Folder>
</ItemGroup>
但是,当我使用dotnet publish 时,没有文件被复制。
这适用于我想要的配置文件 - 这是由 VS 生成的:
<ItemGroup>
<None Remove="my-config.json" />
</ItemGroup>
<ItemGroup>
<Content Include="my-config.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
所以我的问题是 - 这是什么疯狂?从语义上讲,一个名为None 的元素带有Remove 属性——这意味着什么?
我模糊的直觉是元素相当于一个“集合”,其内容将根据该元素/集合的名称进行操作,并且包含、排除、删除以某种方式(?)交互以定义和细化该集合的内容。
但是 - 什么是“文件夹”?什么是“内容”?当事情加倍时会发生什么:为什么需要“无/删除”组合?如果有的话——那是VS生成的!
在文档方面,我发现:
https://docs.microsoft.com/en-us/dotnet/core/tools/csproj#how-to-see-the-whole-project-as-msbuild-sees-it,它讨论了 Compile、EmbeddedResource 和 None 默认 glob(包括、排除和删除 glob)。我知道什么是 glob,我知道这些操作意味着什么,但是这些类型的 glob 是什么?他们如何互动?
它还指向https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2017 处的 MSBuild 文档,但这似乎对此毫无用处:它没有记录 None、EmbeddedResource 或 Compile 显示的元素,也没有谈论 Content和 Folder 我在其他示例中找到的元素(并由 VS 生成)。
事实上,我还没有找到任何关于这一切意味着什么的东西。
我在哪里可以找到这方面的文档?
【问题讨论】:
-
没有疯狂。这就是 Visual Studio 始终 的工作方式。构建操作为
Content的文件将被发布。其他文件没有。如果您尝试发布“经典” ASP.NET Web 应用程序,您将获得相同的行为。CopyToOutputDirectory的意思就是,应该将某些内容复制到配置的输出目录(bin/debug 或 bin/release)。它不会影响文件的类型、构建操作或是否应该打包或发布 -
您无需在
Content元素中添加CopyToOutputDirectory即可发布它 -
顺便说一句,这些东西自 2002 年以来在 IDE 文档、操作指南的分步演练、教程和课程中得到了广泛的记录。部署像
js和css文件这样的内容对于任何 Web 应用程序都至关重要。检查例如Build Actions -
@PanagiotisKanavos 你能回答我提出的任何问题吗?为什么我的复制任务不起作用?各种集合和动作如何相互作用?如果需要无/删除?文档在哪里?那里的链接没有涵盖大部分内容?
-
(另外——“没有疯狂。这就是 Visual Studio 一直以来的工作方式”——它们并不相互排斥)