从C#

时间:2019-10-10 12:19:05

标签: c# nuget .net-assembly filepath

我有一个.NET Framework (4.7)解决方案,它引用了NuGet包。此NuGet软件包应从htmlxml文件中读取。这些文件都位于程序包的文件夹(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包中使用的某些功能正在请求文件路径而不是资源。

1 个答案:

答案 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;