64

我希望在每次构建时将特定目录复制到输出文件夹(“bin”)。我认为它可以通过后期构建脚本来处理。但我不确定如何复制目录本身。我知道如何处理特定文件。

例如,这适用于文件:

项目>属性>构建事件>构建后

COPY "$(SolutionDir)Resources\Release Notes.pdf" "$(TargetDir)"

但是假设我有一个目录Template,现在我需要在成功构建后Template进入文件夹,维护文件夹结构bin

我试过这个:

COPY "$(SolutionDir)Resources\Template\" "$(TargetDir)"

只有Template目录中的文件以这种方式复制,而不是子目录和文件Template夹内的文件。我希望文件夹Template本身进入我的输出bin文件夹。换句话说,bin应该是这样的:

bin > Template > abc.xxx  
                 xxx.yyy
                 Subdirectory1 > asd.qwe
                                 zxc.qwe 
                 Subdirectory2 > ...

这可能是重复的,但我找不到相关的线程。谢谢。

4

6 回答 6

63

我刚刚将此添加到我的 *.csproj 文件中(右键单击编辑项目文件)

<ItemGroup>
    <Content Include="MYCUSTOMFOLDER\**">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>

我认为为此,该目录需要与 *.csproj 文件位于同一层次结构级别或以下。

于 2019-11-17T17:14:47.573 回答
56

这对我有用。/S是递归复制所有内容的密钥。

XCOPY "$(SolutionDir)Resources\Template" "$(TargetDir)\Template\" /S

因为我希望每次都在没有提示的情况下覆盖文件,所以我也添加了一个/Y开关。

XCOPY "$(SolutionDir)Resources\Template" "$(TargetDir)\Template\" /S /Y
于 2013-07-19T17:56:15.877 回答
22

尝试 XCOPY 而不是 COPY;例如

XCOPY "$(SolutionDir)Resources\Template\" "$(TargetDir)\Template" /s /i /y

更多关于 XCOPY 的信息在这里...

http://www.computerhope.com/xcopyhlp.htm

于 2013-07-19T15:25:13.390 回答
6

这是截至本文发布之日在 Visual Studio 2019 上运行的附加解决方案。这将递归地复制文件夹结构和其中的所有文件。在多项目解决方案中的 C++ .vcxproj 上进行了测试。


首先,首先编辑您的 [ .proj / .vcxproj / .csproj ] 文件。打开后,找到您的项目范围标记。如果您已经有 ItemGroups,则将下面的代码直接粘贴在现有代码之后。否则,将其添加到 PropertyGroup 标记之前。然后修改您希望复制到输出路径的文件夹结构的 Include & Link 参数。

<ItemGroup>
    <Content Include="..\Assets\**\*.*">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <DeploymentContent>true</DeploymentContent>
        <Link>Assets\%(RecursiveDir)\%(Filename)%(Extension)</Link>
    </Content>
</ItemGroup>

注意:如果您有多个顶级文件夹,如 JS、IMG、BIN 等,请为每个文件夹创建一个新条目。

于 2020-12-19T16:48:50.247 回答
4

我有这个问题的有效解决方案:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <ItemGroup>
        <CommonFont Include="..\common\src\Web\wwwroot\css\fonts\*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(CommonFont)"  DestinationFolder="wwwroot\css\fonts" SkipUnchangedFiles="true" />
</Target>
于 2020-08-31T12:50:14.813 回答
3

CodingYourLife的解决方案几乎对我有用,但我发现 PreserveNewest 没有得到尊重。我在 Visual Studio 论坛上找到了一个可以正常工作的解决方案。我的 .CSPROJ 现在看起来像这样:


    <Content Include="assets\**">
        <Link>assets\%(RecursiveDir)\%(Filename)%(Extension)</Link>
        <TargetPath>assets\%(RecursiveDir)\%(Filename)%(Extension)</TargetPath>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>

注意:此解决方案需要 Visual Studio 16.10 或更高版本。

于 2021-12-30T20:53:19.027 回答