我在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
答案 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();