簡體   English   中英

如何使用沒有庫但僅包含文件的nuget包

[英]How to use a nuget package that has no library in it but only files to be used

我在C#項目中安裝了一個nuget包(例如'foo',版本= 1.0.4),其中只有一些數據文件,沒有庫,這就是為什么它無法在項目中引用的原因。 這些文件位於nuget軟件包的默認位置( {proj loc}\\packages\\foo.1.0.4\\lib\\net45\\ )。 如何使用C#代碼正確訪問/讀取這些文件?

我知道我可以通過在磁盤上指定它們的物理路徑來訪問它們,例如

string filePath = $"{Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))}\\packages\\foo.1.0.4\\lib\net45\\bar.ttf";

但是我不想這樣做,因為路徑的一部分是硬編碼的,並且每當安裝了新版本的'foo'nuget軟件包(即此部分'\\ foo.1.0.4 \\)時,情況都會改變。

更新:我已經找到了一個完全動態的解決方案,請在https://stackoverflow.com/a/54459367/1300390上查看

由於代碼取決於更改的外部資源,因此應考慮在項目根目錄中創建目錄。

MyProj-MyTiffStorage(新文件夾)

並相應地更改您的代碼以指向該目錄。 但是在這種情況下,只要軟件包有更新,就需要注意從軟件包(... lib \\ net45)復制文件。

通過這種方式,您的代碼始終只有一個真實來源,因此無需在每次更新時更改代碼。 但是,如前所述,請注意手動復制文件。

謝謝

根據您的評論:

可能沒有。 對於非lib文件,使用nuget包可以證明非常有效和聰明,例如,在我們的情況下,這些文件是由另一個項目生成的,而否。 其他客戶端項目中,如果需要它們,則需要包含/使用這些文件,並有機會在可用時獲取更新的版本,在這種情況下,nuget軟件包管理提供了組織良好的機制。

一種解決方案是創建一個帶有訪問這些文件的接口的薄層庫(將其打包在同一nuget中)。

考慮使用git的另一種方法是使用子模塊而不是nuget包。 是否可行取決於您的特定工作流程。

在嘗試了不同的方法和嘗試之后,我終於找到了可以很好地解決此問題的以下方法:

可以訪問/讀取nuget軟件包默認下載文件夾中的文件,而無需將任何不同的硬編碼部分定義為:

string appDir = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()));
string filePath = Directory.GetFiles(appDir, "baar.ttf", SearchOption.AllDirectories).First();

更新:

為了使其更快一點,可以將搜索空間進一步減少到“ packages”文件夾中,如下所示:

string nugetPackagesDir = $"{Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))}\\packages";
string filePath = Directory.GetFiles(nugetPackagesDir, "baar.ttf", SearchOption.AllDirectories).First();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM