如何使用没有库但仅包含文件的nuget包

时间:2019-01-31 08:25:18

标签: c# nuget

我在C#项目中安装了一个nuget包(例如'foo',版本= 1.0.4),其中仅包含一些数据文件,而没有库,这就是为什么不能在项目中引用它的原因。这些文件位于nuget软件包的默认位置(Example e=new ExampleBuilder().setId(1).setName("name").createExample(); )。如何正确使用C#代码访问/读取这些文件?

我知道我可以通过在磁盘上指定它们的物理路径来访问它们,例如

{proj loc}\packages\foo.1.0.4\lib\net45\

但是我不想这样做,因为路径的一部分是硬编码的,并且每当新版本的'foo'nuget软件包(即这部分'\ foo.1.0.4 \')都会改变。已安装。

更新: 我已经找到了一个完全动态的解决方案,请访问https://stackoverflow.com/a/54459367/1300390

3 个答案:

答案 0 :(得分:0)

由于您的代码取决于可能会更改的外部资源,因此您应该考虑在项目根目录中创建目录。

MyProj  -MyTiffStorage(新文件夹)

并相应地更改代码以指向此目录。 但是在这种情况下,只要软件包有更新,就需要注意从软件包(... lib \ net45)复制文件。

通过这种方式,您的代码始终只有一个真实来源,因此无需在每次更新时更改代码。但是,如前所述,请注意手动复制文件。

谢谢

答案 1 :(得分:0)

根据您的评论:

  

可能没有。使用nuget包可以证明的场景   对于非lib文件非常高效和聪明,例如在我们的   情况下,这些文件是由另一个项目生成的,否。另一个   客户项目需要包含/使用这些文件   并有机会获得他们的更新版本   当它们可用时,nuget包管理提供了一个   在这种情况下组织良好的机制。

一种解决方案是创建一个带有访问这些文件的界面的薄层​​库(将其打包在同一nuget中)。

如果您正在使用git的另一种方法是使用子模块而不是nuget包。是否可行取决于您的特定工作流程。

答案 2 :(得分:0)

在尝试了不同的方法和尝试之后,我终于找到了可以很好地解决此问题的以下方法:

可以访问/读取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();