C# 获取位于NuGet包';C中相同包的s目录#
我有一个C# 获取位于NuGet包';C中相同包的s目录#,c#,nuget,.net-assembly,filepath,C#,Nuget,.net Assembly,Filepath,我有一个.netframework(4.7)解决方案,它引用了一个NuGet包。此NuGet包应从html和xml文件中读取。这些文件都位于包的文件夹(NuGet包)中,解决方案不直接需要它们,而只需要NuGet包本身 在运行使用上述NuGet包的解决方案时,如何引用这些文件 我尝试了/,但这只是指向我的解决方案的根目录 我正在尝试的实际调用是:File.ReadAllText(path) 我还尝试将文件的Copy to Output Directory属性设置为Copy always,并将Bu
.netframework(4.7)
解决方案,它引用了一个NuGet包。此NuGet包应从html
和xml
文件中读取。这些文件都位于包的文件夹(NuGet包)中,解决方案不直接需要它们,而只需要NuGet包本身
在运行使用上述NuGet包的解决方案时,如何引用这些文件
我尝试了/
,但这只是指向我的解决方案的根目录
我正在尝试的实际调用是:File.ReadAllText(path)
我还尝试将文件的Copy to Output Directory
属性设置为Copy always
,并将Build Action
用作Content
。例如,这是在包//Content/*.html
中复制这些文件,不知何故,我想我可以得到这个路径,比如这里给出的解决方案:
但对于我来说,这看起来很复杂,因为这是一项看似简单的任务。做这件事的干净方法是什么
编辑:重命名问题,指定在这种情况下设置资源不是选项,因为我在NuGet软件包中使用的某些函数请求的是文件路径而不是资源。如果这是您创建的NuGet软件包,在运行时的任何情况下都不应使用外部文件!有人可以改变它,如果需要的话,添加它作为 无论如何,在运行时,我会得到.dll所在的文件夹,如下所示:
var currentAssemblyName = Assembly.GetExecutingAssembly().GetName().Name;
var rootFolder = Assembly.GetExecutingAssembly().Location.Split(currentAssemblyName)[0];
编辑-应适用于.NET Framework或dotnet core
我的错误是,要获取DLL的实际路径,您需要搜索程序集,因为ExecutingAssembly是从.exe启动的地方开始的
var assembly = AppDomain.CurrentDomain
.GetAssemblies()
.SingleOrDefault(assembly => assembly.GetName().Name == "my.awsome.nuget");
var location = assembly.Location;
这是控制台应用程序还是web应用程序。净核心。NET Framework?很抱歉,忘了提到它是一个.NET Framework解决方案。您还可以在包的程序集中放置一个帮助函数,然后使用
assembly.GetCurrentAssembly()
。但是到目前为止,与使用嵌入式资源相比,几乎没有任何好处。另外,使用Path.GetDirectoryName(assembly.Location)
getExecutionGasEmbly
可能比使用拆分更容易获得程序集目录,GetCurrentAssembly
和AppDomain.CurrentDomain.GetAssembly
都为我返回了解决方案的调试文件夹路径。获取资源对我来说不是一个选项,因为我有一些函数将路径作为参数而不是资源。是的,金块就在那里,如果发布应用程序,金块.dll就在发布文件夹下,那么问题出在哪里?