如何在 C# 專案中連結一個資料夾下的所有檔案

2023-02-07 12:03:10

在 C# 專案中通過連結方式引入檔案可以讓我們在專案中使用這些檔案中的程式碼。常見的比如連結 AssemblyInfo.cs 檔案,這樣我們就可以在專案中使用這個檔案中的版本號等資訊。但是如果我們想要連結一個資料夾下的所有檔案,該怎麼做呢?今天我們就來看看如何在 C# 專案中連結一個資料夾下的所有檔案。

編輯專案檔案引入單個檔案

在專案檔案中,我們可以通過 Compile 標籤來引入單個檔案。比如我們想要引入 AssemblyInfo.cs 檔案,我們可以這樣做:

<Project>
    <ItemGroup>
        <Compile Include="../Shared/AssemblyInfo.cs">
            <Link>Properties/AssemblyInfo.cs</Link>
        </Compile>
    </ItemGroup>
</Project>

這樣我們就可以在專案中使用 AssemblyInfo.cs 檔案中的程式碼了。

編輯專案檔案引入資料夾下的所有檔案

那如果想要引入多個檔案,我們可以使用萬用字元來引入資料夾下的所有檔案。比如我們想要引入 Shared 資料夾下的所有檔案,我們可以這樣做:

<Project>
    <ItemGroup>
        <Compile Include="..\Shared\**\*.cs">
            <Link>Properties/%(Filename)%(Extension)</Link>
        </Compile>
    </ItemGroup>
</Project>

這樣我們就可以在專案中使用 Shared 資料夾下的所有檔案中的程式碼了。

不過這樣會使得所有的檔案在專案中都會顯示在 Properties 資料夾下,這樣會讓專案檔案看起來很亂。我們可以通過修改 Link 標籤來修改檔案在專案中的顯示位置。比如我們想要把 Shared 資料夾下的所有檔案都顯示在專案的根目錄下,我們可以這樣做:

<Project>
    <ItemGroup>
        <Compile Include="..\Shared\**\*.cs">
            <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
        </Compile>
    </ItemGroup>
</Project>

別忘了使用 Directory.Build.props 檔案

上面的方法都是在專案檔案中引入檔案的,但是如果我們有很多專案,那麼我們就需要在每個專案檔案中都引入這些檔案。這樣會讓我們的專案檔案變得很亂。我們可以通過使用 Directory.Build.props 檔案來解決這個問題。我們可以在解決資料夾下建立一個 Directory.Build.props 檔案,然後在這個檔案中引入資料夾下的所有檔案。比如我們想要引入 Shared 資料夾下的所有檔案,我們可以這樣做:

<Project>
    <ItemGroup>
        <Compile Include="..\Shared\**\*.cs">
            <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
        </Compile>
    </ItemGroup>
</Project>

總結

通過上面的方法,我們可以在 C# 專案中引入資料夾下的所有檔案。這樣我們就可以在專案中使用這些檔案中的程式碼了。

參考資料

感謝您的閱讀,如果您覺得本文有用,請點贊、關注和轉發;更多精彩內容請關注我的部落格 https://www.newbe.prohttps://github.com/newbe36524/newbe36524

  • 本文作者: newbe36524
  • 本文連結: https://www.newbe.pro/Others/0x017-csharp-how-to-link-all-the-files-in-a-given-folder/
  • 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協定。轉載請註明出處!

  1. https://learn.microsoft.com/en-us/visualstudio/msbuild/common-msbuild-project-items?view=vs-2022&WT.mc_id=DX-MVP-5003606

  2. https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2022&WT.mc_id=DX-MVP-5003606