我有一个.NET Framework (4.7)
解决方案,它引用了NuGet包。此NuGet软件包应从html
和xml
文件中读取。这些文件都位于程序包的文件夹(NuGet程序包)中,解决方案不需要它们直接使用,而仅是NuGet程序包本身需要。
运行使用上述NuGet软件包的解决方案时,如何引用这些文件?
我尝试使用./
,但所有这些操作都指向解决方案的根目录。
我正在尝试的实际通话是:File.ReadAllText(path)
。
我还尝试将文件的Copy to Output Directory
属性设置为Copy always
,并将Build Action
用作Content
。例如,这是将这些文件复制到packages/<package name>/Content/*.html
中,我想可以通过某种方式获得此路径,例如此处给出的解决方案:Getting the path of a nuget package programmatically
但是对于这样一个看似简单的任务,这对我来说似乎很复杂。干净的方法是什么?
编辑:重命名的问题是在这种情况下,设置资源不是一种选择,因为我在NuGet包中使用的某些功能正在请求文件路径而不是资源。
答案 0 :(得分:2)
如果这是您创建的nuget程序包,则在任何情况下在运行时都不应使用外部文件!有人可以更改它,如果需要,可以将其添加为embedded resource。
无论如何,在运行时,我将获得.dll所在的文件夹,如下所示:
var currentAssemblyName = Assembly.GetExecutingAssembly().GetName().Name;
var rootFolder = Assembly.GetExecutingAssembly().Location.Split(currentAssemblyName)[0];
编辑-适用于.NET Framework或dotnet核心
我的错误,要获取DLL的真实路径,您需要搜索程序集,因为 ExecutingAssembly 是.exe的启动源
var assembly = AppDomain.CurrentDomain
.GetAssemblies()
.SingleOrDefault(assembly => assembly.GetName().Name == "my.awsome.nuget");
var location = assembly.Location;