Visual Studio 在编译时将文件复制到应用程序文件夹中

wqsoz72f  于 2023-10-23  发布在  其他
关注(0)|答案(9)|浏览(231)

如果我有一些文件想在编译时从我的项目复制到.\bin\debug\文件夹中,那么似乎我必须把它们放在项目的根目录中。将它们放入子文件夹似乎是将它们复制到.\bin\debug\文件夹中,其结构与存储它们的结构相同。
有什么办法可以避免这种情况吗?
先说清楚如果我在ConfigFiles文件夹中有一个MyFirstConfigFile.txtMySecondConfigFile.txt,并且我将它们的 Copy to Output 设置为 Copy...,那么它们就会出现在.\bin\debug\ConfigFiles\文件夹中。我希望它们出现在.\bin\debug\文件夹中。

kgsdhlau

kgsdhlau1#

你可以通过一个post build事件来实现这一点。将文件设置为编译时不执行任何操作,然后在宏中将文件复制到所需的目录。
下面是一个构建后宏,我认为它可以通过将Configuration目录中的所有文件复制到根构建文件夹中来工作:

copy $(ProjectDir)Configuration\* $(ProjectDir)$(OutDir)
4szc88ey

4szc88ey2#

您可以在csproj上使用MSBuild任务,就像这样。
编辑您的csproj文件

<Target Name="AfterBuild">
    <Copy SourceFiles="$(OutputPath)yourfiles" DestinationFolder="$(YourVariable)" ContinueOnError="true" />
  </Target>
lstz6jyr

lstz6jyr3#

您还可以将文件或链接放在解决方案资源管理器的根目录中,然后设置文件属性:
Build action = Content

Copy to Output Directory = Copy if newer(例如)
对于链接,按住shift和control键,将文件从windows资源管理器拖到解决方案资源管理器中。

u4vypkhs

u4vypkhs4#

我个人更喜欢这种方式。
修改.csproj以添加

<ItemGroup>
    <ContentWithTargetPath Include="ConfigFiles\MyFirstConfigFile.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <TargetPath>%(Filename)%(Extension)</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>

或者概括地说,如果你想复制所有的磁盘和文件,你可以这样做:

<ItemGroup>
    <ContentWithTargetPath Include="ConfigFiles\**">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <TargetPath>%(RecursiveDir)\%(Filename)%(Extension)</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>
ryhaxcpt

ryhaxcpt5#

从子文件夹复制到子文件夹

if not exist "$(ProjectDir)$(OutDir)subfolder" mkdir "$(ProjectDir)$(OutDir)subfolder"

 copy "$(ProjectDir)subfolder\"  "$(ProjectDir)$(OutDir)subfolder\"
lkaoscv7

lkaoscv76#

您希望在项目中使用后期生成事件。您可以在那里指定输出,并且有经常使用的宏值,如项目路径,项目名称等。

o3imoua4

o3imoua47#

您可以使用项目的PostBuild事件。构建完成后,您可以运行DOS批处理文件并将所需文件复制到所需文件夹。

oxiaedzo

oxiaedzo8#

为了寻找解决方案,我尝试了一个命令“xcopy /y $(ProjectDir)yourfile $(ProjectDir)$(OutDir)”,但它不是操作系统不可知的,所以当它在Linux上执行时,我遇到了问题。
我试了这个。它是操作系统不可知的:

<ItemGroup>
    <Content Include="YourFolderHere\*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>
pb3skfrl

pb3skfrl9#

我在搜索“在编译时将文件复制到应用程序文件夹”时发现了这个问题。OP似乎已经对此进行了排序,但如果您没有:
在Visual Studio中右键单击文件,选择属性,然后将选项“复制到输出”更改为“始终”。参见http://msdn.microsoft.com/en-us/library/0c6xyb66.aspx

相关问题