msbuild 修改 VisualStudio 文件複製到輸出目錄的路徑

在默認的 VisualStudio 可以右擊任意的文件,讓這個文件在編譯時複製到輸出目錄,但是這個選項將會在複製到輸出目錄時帶上這個文件所在 VisualStudio 的文件夾結構。本文告訴大家幾個方法讓 VisualStudio 的文件可以在編譯時輸出到自定義的任意路徑

文件夾到文件夾

將整個文件夾內容輸出到自定義文件夾可以使用寫一個 Target 的方法

如我需要將 VisualStudio 的 dll 文件夾的內容全部輸出到輸出目錄,而不是輸出到 輸出目錄下的 Dll 文件夾,可以使用下面代碼

    <Target Name="CopyReferenceDll" AfterTargets="Build">
        <ItemGroup>
            <ReferenceDll Include="Dll\*.dll">
            </ReferenceDll>
        </ItemGroup>
        <Copy SourceFiles="@(ReferenceDll)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="True"></Copy>
    </Target>

將上面代碼複製到 csproj 文件裏面,放在 </Project> 之前就可以做到將 VisualStudio 裏面的 Dll 文件夾的 dll 文件複製到輸出文件夾

至於需要輸出其他文件到其他文件夾的,看上面的代碼修改就可以了,如果不知道如何修改請聯繫我

用 Link 修改路徑

通過修改文件鏈接的地址,這個方法只能輸出到輸出文件夾內某個文件夾下

    <ItemGroup>
      <None Update="Dll\*.dll" Link="%(Filename)%(Extension)">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>

此時的 Dll 文件夾的 dll 文件,將會重新鏈接到 *.dll 路徑而不是 Dll\*.dll 但是此時會在 VisualStudio 看到項目的根文件夾存在很多 dll 文件

如果不想看到這些文件通過 Visible 屬性

    <ItemGroup>
      <None Update="Dll\*.dll" Link="%(Filename)%(Extension)" Visible="false">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>

通過 ContentWithTargetPath 項

將原本的 None 替換爲 ContentWithTargetPath 項,這個項提供 TargetPath 屬性,設置輸出的文件

    <ItemGroup>
        <ContentWithTargetPath Include="Dll\*.dll">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <TargetPath>%(Filename)%(Extension)</TargetPath>
        </ContentWithTargetPath>
    </ItemGroup>

這個方法底層也是調用了 Copy 命令

適合文件到文件的方式,將 %(Filename)%(Extension) 替換爲具體文件,如將某個文件複製到指定的路徑,這樣寫清真很多,請看代碼

    <ItemGroup>
        <ContentWithTargetPath Include="Dll\lindexi.dll">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <TargetPath>lindexi.dll</TargetPath>
        </ContentWithTargetPath>
    </ItemGroup>

本文用到了 %(Filename) 以及 CopyTarget 等,這些可以在我博客看到如何使用

Roslyn 如何使用 MSBuild Copy 複製文件

c# - Visual Studio: How to "Copy to Output Directory" without copying the folder structure? - Stack Overflow

我搭建了自己的博客 https://blog.lindexi.com/ 歡迎大家訪問,裏面有很多新的博客。只有在我看到博客寫成熟之後纔會放在csdn或博客園,但是一旦發佈了就不再更新

如果在博客看到有任何不懂的,歡迎交流,我搭建了 dotnet 職業技術學院 歡迎大家加入

如有不方便在博客評論的問題,可以加我 QQ 2844808902 交流

知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名林德熙(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我聯繫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章