Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在编译时将文件复制到应用程序文件夹_C#_Visual Studio - Fatal编程技术网

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。这是最好的解决方案,因为你可以使用通配符复制许多文件,并且它们不需要在项目中。