始终复制到输出目录无效。

61

我有一个简单的控制台项目,需要读取两个Excel文件。这些Excel文件已经被包含在项目中(使用“添加现有项”操作),并且我已经标记它们为“复制到输出目录”。但是,在调试/运行代码时,它们并没有被复制到调试目录中。

我感觉我可能忘记了一些微不足道的东西。我还需要做什么?


1
你没有在Excel中打开这些文件,对吧? - Steven Robbins
不,我刚刚检查过了。看起来很好。 - Jonas Lincoln
1
请勿使用“始终复制”选项,这会导致在 Visual Studio 中构建速度变慢。我在微软公司负责此功能,可以非常自信地说,您应该始终使用“保留最新”选项而不是“始终复制”。 - Drew Noakes
1
将生成操作更改为“嵌入式资源”解决了我的问题。请参见https://dev59.com/3WvXa4cB1Zd3GeqPEwBT#17688239。 - Telmo Marques
10个回答

83
在Visual Studio的文件属性中,设置以下内容:

构建操作: 无

复制到输出目录: 总是复制


9
这篇文章帮助我解决了一个图标文件的问题。图标文件的默认构建操作是“Resource”。“复制文件”设置似乎无法在构建操作为“Resource”时发挥作用,但当我将构建操作设置为“None”时,它奏效了。谢谢。 - user2023861
15
唯一仍未得到解答的问题是……为什么?! - Neuron
11
如果文件在您的项目的子文件夹中,它将被放置在 bin 目录内的一个子文件夹中。 - Martin Capodici
1
现有项目将BMP作为资源 - 将其更改为NONE即可解决问题。它并没有被构建,只需要在输出目录中存在 - 这是我忽略的非常微妙的差异。这解决了问题。 - Mark W. Mitchell
如果您不想在文件更改时重新构建,请使用此答案。如果确实需要重新构建,则将“生成操作”设置为“内容”。 - digitguy

37

非源代码文件的更改不会导致重新构建 - 当编译器进行其过时检查时,它们不会被考虑。

尝试通过完全删除输出目录来强制执行完整的重建(有时从Visual Studio内部执行此操作并不完整)。

可能是因为没有运行完整的构建,所以这些文件还没有被复制过去。


4
对我来说,清理解决方案然后重新构建它是有效的。这些选项都在“生成”下拉菜单中。 - Dagrooms
4
十年后依旧存在同样的问题,非常感谢。 - MeerArtefakt
1
你不应该只为了进行构建而进行清理或重建。如果是这种情况,那么项目配置错误。确保要复制的项具有适当的项类型(例如 Content),并将“复制到输出目录”设置为“仅在较新时复制”。永远不要使用“始终复制”,因为它会因为太过复杂的原因导致 VS 的构建性能下降。 - Drew Noakes
@DrewNoakes 无论是“始终复制”还是“仅在更改时复制”(使用Build Action = Content)都不会在构建时复制文件,只有在重新构建(或清理,然后构建)时才会复制。这毫无意义。编辑:将Build Action更改为“嵌入式资源”解决了问题。 请参见https://dev59.com/3WvXa4cB1Zd3GeqPEwBT#17688239 - Telmo Marques

30

对于我的WPF项目,这些都不起作用。你需要将其标记为内容+ 始终复制。

有关不同Visual Studio文件属性的详细信息,请参阅此页面


谢谢你,Scott,你是救世主。 - Bassie

12

你把它们标记为内容了吗?


4
没有,但是现在我有了,结果并没有产生任何影响。 - Jonas Lincoln
1
这个对我有用(哇,12年后) - Richard
1
这个对我有用(哇,13年后) - kdrapel
这个对我有帮助(哇,14年后) - user1151923

7

我在项目中将一些png文件重命名、排除和重新添加时遇到了问题。似乎VS2015无法跟踪如何处理这些文件:尽管在VS中将“复制到输出目录:始终复制”设置为有问题的文件,但csproj文件中并不存在CopyToOutputDirectory关键字。我不得不手动更改csproj文件,从

<Content Include="xxx.png"/>

转换为:

<Content Include="xxx.png">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>

我认为这个应该被点赞,它涵盖了大多数关于错误复制到输出问题的问题,我在使用VS2017时也遇到了这个问题。 - BigChief

4

这可能是个愚蠢的问题,但你是否在调试模式下运行?我曾犯过同样的错误,后来发现我处于发布模式。


好问题,但不,我正在调试模式下运行。 - Jonas Lincoln

1
我把 ContentCopy Always 放进去,它就工作了。

0
我刚遇到了这个问题,不知为何在项目属性下选择“创建没有清单的应用程序”最终将链接的内容文件复制到了构建目录中。

0

VS 2015的行为类似,无法正确更新Content文件的输出目录。 奇怪的是,将一个文本文件放在Content文件所在的文件夹中并将其设置为Content文件似乎可以起作用。文本文件将被复制到目录中,所有其他Content文件也将被复制。更奇怪的是,如果您删除了文本文件,即使不再有原始文件可供复制,它仍将继续显示在输出目录中。


0
VS 2022 几乎让我抓狂了。 我在一个 WPF .NET 6.0 项目中进行了大量测试,但是一个 NLog.config 文件就是无法被复制到输出文件夹中,尽管已经设置了 copy always
无论是将构建操作设置为 NoneContent 还是 Resource,都没有起作用。
唯一能让它按预期工作的方法是将构建操作设置为 Embedded resource。这样,对该文件的更改会触发重新构建,从而将文件复制过去。

考虑到这个问题是十多年前发布的,而且你和我在10天内都遇到了这个问题,而且你的解决方案解决了我的问题,我倾向于怀疑这是一个VS的错误。 - undefined
告诉你,这个问题已经通过重新启动VS 2022或更新到17.8.2版本来解决了(从类似17.5的版本升级,但是我记不清楚并且在更新之前没有记录下来)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接