Visual Studio 是否将整个目录复制到输出文件夹以保持文件夹结构?

kulphzqa  于 2022-11-17  发布在  其他
关注(0)|答案(7)|浏览(183)

我希望在每次构建时都将一个特定的目录复制到输出文件夹(“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 > ...

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

hpcdzsge

hpcdzsge1#

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

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

我认为对于这个目录需要在同一层次结构的水平作为 *.csproj文件或以下。

k2arahey

k2arahey2#

/S是递归复制所有内容的键。

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

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

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

zengzsys3#

请尝试XCOPY而不是COPY;例如:

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

有关XCOPY的更多信息,请单击此处...
http://www.computerhope.com/xcopyhlp.htm

sq1bmfud

sq1bmfud4#

这是一个在Visual Studio 2019上运行的附加解决方案,截止到本文发表之日。这将递归复制文件夹结构和其中的所有文件。在多项目解决方案中的C++ .vcxproj上测试。
首先,编辑您的[ .proj / .vcxproj / .csproj ]档案。开启后,寻找您的项目范围标记。如果您已经有ItemGroup,请将下面的程式码直接贴到现有的ItemGroup之后。否则,请将它加入PropertyGroup标记之前。然后修改您要复制到输出路径之文件夹结构的Include & Link参数。

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

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

0sgqnhkj

0sgqnhkj5#

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或更高版本。

xytpbqjk

xytpbqjk6#

对于这个问题,我有一个可行的解决方案:

<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>
hmmo2u0o

hmmo2u0o7#

这是唯一对我有效的解决方案(VS2022、.Net Framework):

<ItemGroup>   
    <ContentWithTargetPath Include="..\..\..\Libraries\Core\Business\Vodovoz.Reports\Reports\**">     
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>     
      <TargetPath>Reports\%(RecursiveDir)\%(Filename)%(Extension)</TargetPath>   
    </ContentWithTargetPath> 
  </ItemGroup>

相关问题