C# 在编译时将文件复制到应用程序文件夹
如果我有一些文件要在编译时从项目复制到C# 在编译时将文件复制到应用程序文件夹,c#,visual-studio,C#,Visual Studio,如果我有一些文件要在编译时从项目复制到\bin\debug\文件夹中,那么我似乎必须将它们放到项目的根目录中。将它们放入子文件夹似乎将它们复制到\bin\debug\文件夹中,其结构与它们存储的结构相同 有没有办法避免这种情况 需要澄清的是:如果我在ConfigFiles文件夹中有一个MyFirstConfigFile.txt和MySecondConfigFile.txt,并且我将它们的副本设置为输出为复制…,那么它们会出现在\bin\debug\ConfigFiles\文件夹中。我希望它们出现
\bin\debug\
文件夹中,那么我似乎必须将它们放到项目的根目录中。将它们放入子文件夹似乎将它们复制到\bin\debug\
文件夹中,其结构与它们存储的结构相同
有没有办法避免这种情况
需要澄清的是:如果我在
ConfigFiles
文件夹中有一个MyFirstConfigFile.txt
和MySecondConfigFile.txt
,并且我将它们的副本设置为输出为复制…,那么它们会出现在\bin\debug\ConfigFiles\
文件夹中。我希望它们出现在\bin\debug\
文件夹中。您可以在csproj上使用MSBuild任务,如下所示
编辑您的csproj文件
<Target Name="AfterBuild">
<Copy SourceFiles="$(OutputPath)yourfiles" DestinationFolder="$(YourVariable)" ContinueOnError="true" />
</Target>
您可以通过生成后事件来完成此操作。将文件设置为编译时不执行任何操作,然后在宏中将文件复制到所需的目录 下面是一个生成后宏,我认为它可以通过将名为Configuration的目录中的所有文件复制到根生成文件夹来工作:
copy $(ProjectDir)Configuration\* $(ProjectDir)$(OutDir)
您希望在项目上使用生成后事件。您可以在那里指定输出,并且对于经常使用的项目路径、项目名称等有宏值。您可以使用项目的后期生成事件。构建完成后,您可以运行DOS批处理文件并将所需文件复制到所需文件夹。我在搜索“编译时将文件复制到应用程序文件夹”时发现了这个问题。OP似乎已经对此进行了排序,但如果您没有:
在Visual Studio中右键单击该文件,选择“属性”,然后将“复制到输出”选项更改为“始终”。请参见您还可以将文件或链接放入解决方案资源管理器的根目录中,然后设置文件属性:
buildaction=Content
及
Copy to Output Directory=Copy if newer
(例如)
对于链接,请按住shift键和control键,将文件从windows资源管理器拖动到解决方案资源管理器中
从子文件夹复制到子文件夹
if not exist "$(ProjectDir)$(OutDir)subfolder" mkdir "$(ProjectDir)$(OutDir)subfolder"
copy "$(ProjectDir)subfolder\" "$(ProjectDir)$(OutDir)subfolder\"
就我个人而言,我更喜欢这种方式 修改
.csproj
以添加
保存最新
%(文件名)%(扩展名)
或者,如果要复制所有子文件夹和文件,可以执行以下操作:
保存最新
%(递归目录)\%(文件名)%(扩展名)
对于目标,它不应该是$(ProjectDir)\%(OutDir)?正确且经过测试的(Vs2010)宏是:copy“$(ProjectDir)Firebird\Firebird\u bin*”$(ProjectDir)$(OutDir)“您也可以为输出创建一个相对文件:copy“$(ProjectDir)Firebird\u bin*”$(OutDir)”我认为使用引号是必要的:copy“$(ProjectDir)MSVS2017(15.4)中的子文件夹“\u name\”*“$(ProjectDir)$(OutDir)”
应该是$(OutDir)
(即没有$(ProjectDir)
)看起来。。。否则会出现双路径错误。这将保留OPI不接受的原始相对路径。如果将文件放入项目的顶级节点,则会将其直接复制到输出文件夹$(OutputPath)。有关可接受的备选方案,请参阅。Op要求复制到编译目录,而不保留复制文件位置的相对目录结构欢迎使用StackOverflow,感谢您的贡献。你已经回答了一个非常老的问题,已经有了一大堆高投票率的答案。如果您认为您的答案除了现有的向上投票的答案之外还很有用,那么您应该添加一些解释,说明为什么您的答案解决了问题,以及为什么它比其他答案更好/不同。在我看来,这比构建后事件更好。非常感谢。这是否与右键单击项目并从解决方案资源管理器中选择“添加|现有项”,然后将文件属性“复制到输出目录”设置为“如果更新,则复制”相同。不需要直接修改XML。@AntonyBooth过了一段时间,您就会意识到,理解正在发生的事情并直接修改代码总是比学习如何使用IDE做同样的事情更容易。今天您使用的是Visual Studio,明天可能是JetBrains Rider,后天可能是VS代码。最后,您总是能够更好地掌握一种语言,而不是IDE。PS:我不知道你所描述的是否相同,因为我只知道如何在XML中进行,这样更好。此外,目前没有办法在IDE中设置目标路径,所以现在我们必须编辑XML。这是最好的解决方案,因为你可以使用通配符复制许多文件,并且它们不需要在项目中。