我试图使用相对路径从ASP.Net vNext类库访问文件.该文件(应该)位于应用程序的安装文件夹中,并构建获取该文件夹路径所需的完整路径.
使用时System.Reflection.Assembly.GetExecutingAssembly(),Location属性为空.该CodeBase属性包含以下内容:
CodeBase ="file:/// C:/Users/username/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta7/bin/Microsoft.Dnx.Loader.dll"
如何获取正在执行的文件所在的实际文件夹?
编辑:这里 的答案对ASP.Net 5无效,正如我已经解释的那样. - 仅用于重复标记.
我有一个ASP.NET网站,我想找到/ bin/[Configuration]文件夹来使用外部工具(exe文件).当我使用反射获取调用程序集位置时,它返回类似于:
C:\Windows\Microsoft.NET\Framework\\...\Temporary ASP.NET Files\a1388a5e\\...\my.dll
由于每个dll在临时ASP.NET文件下都有自己的目录,因此对我来说失败了.
如何获取已编译的二进制文件夹的位置,其中dll和.exe是(即bin /)而不是asp.net的临时缓存?
笔记
我们有一个插件可以与第三方软件一起分发(也可以使用我们自己的软件)我们的插件是用C#编写的,包含一些log4net日志记录.在我们自己的软件中,我们有一个.exe.config包含我们的log4net部分并允许配置.但是在第三方方面,我们无法做到这一点.
关于如何在代码中配置它的任何建议?(假设它还没有配置,在我们自己的软件的情况下)?
我想做的是获取我的excel文件的文件路径.但我无法这样做.
文件位于Document/Visual Studio 2013/Project/ProjectName/a.xlsx中
string path = Path.Combine(HttpContext.Current.Server.MapPath("~/"),"a.xlsx");
string SheetName="Sheet1";
Run Code Online (Sandbox Code Playgroud)
这样做是错误的还是正确的方法?
奇怪的是,如果我将属性从ComponentModel文件夹移回Common项目的根目录,代码工作正常.在为InflowHealth.Common.ComponentModel命名空间重构所有引用之后,我无法想象可能引用旧命名空间的内容.
这几乎就像有一些引用隐藏在一些不是基于代码而是运行时和动态的地方,但我确实在查看所有查找结果时都看不到它InflowHealthErrorContext.
有趣的是,当我注释掉使用自定义属性继承路由的行并使用默认路由时,它仍然会爆炸.更令人感兴趣的是,在重构它并将其移动到文件夹(和命名空间)之前,它正在寻找的命名空间InflowHealth.Common.InflowHealthErrorContextAttribute 实际上是旧的FQN ComponentModel.
我相信我已经确定该问题与我用来继承操作的另一个自定义属性有关.此属性添加到HttpConfiguration以下内容中:
public static void MapInheritedAttributeRoutes(this HttpConfiguration config)
{
config.MapHttpAttributeRoutes(new InheritanceDirectRouteProvider());
}
Run Code Online (Sandbox Code Playgroud)
该属性的实现非常简单:
public class InheritanceDirectRouteProvider : DefaultDirectRouteProvider
{
protected override IReadOnlyList<IDirectRouteFactory> GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
{
return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>(true);
}
}
Run Code Online (Sandbox Code Playgroud)
看来继承此InflowHealthErrorContext属性会导致问题,但我不确定问题究竟是什么.我试过了:
Inherited = false以便它是可继承的.AllowMultiple = true只是因为配置错误.那些没有改变错误.
我在Common一些Web API应用程序共享的程序集中有一个非常简单的属性.这很简单,我只是无法弄清楚会导致这个异常的原因.
我试图在此收集Fusion日志,但它没有记录它们.
这是Attribute:
using …Run Code Online (Sandbox Code Playgroud) 我的本地文档中有 chromedriver.exe,工作正常。但现在是部署到生产的时候了。不知何故,我需要将它与我的软件捆绑在一起,并在本地引用它。
我如何在本地引用我的驱动程序,我应该把它放在哪里?
我需要知道托管程序集的上下文(ASP.NET,Windows服务,Windows应用程序等).
我的程序集应根据上下文调用不同的函数.例如,如果需要创建相对于其位置的文件夹,我想知道使用哪种方法:Path.GetFullPath(dirName)或Server.MapPath(dirName).
我正在尝试编写一个 SpecFlow 测试,在其中测试当我的应用程序读取特定结构的文件夹和文件时会发生什么。我想在我的项目中包含这些文件夹和文件,以便测试不仅仅在我自己的计算机上运行。
例如,我的 Specs 项目中有两个文件夹。一个称为“SimpleTestModel”,另一个称为“ComplexTestModel”。如何在我的 SpecFlow 测试中引用这些文件夹?
启动 dotnet dll 时
cd /
dotnet /tmp/donetproject/donetproject.dll
Run Code Online (Sandbox Code Playgroud)
编码
.AddJsonFile("hostsettings.json", optional: true)
Run Code Online (Sandbox Code Playgroud)
会看
/hostsettings.json
不是
/tmp/donetproject/hostsettings.json
设置 GetCurrentDirectory 无效
.SetBasePath(Directory.GetCurrentDirectory())
Run Code Online (Sandbox Code Playgroud)
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hostsettings.json", optional: true)
.AddCommandLine(args)
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls()
.UseConfiguration(config)
.UseStartup<Startup>();
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为JIMS.Printing.dll的DLL,它放在主应用程序JIMS.exe的Reporting文件夹中.
但是在调用运行JIMS.exe的Reporting中的JIMS.Printing.dll代码里面的Templates文件夹中的一些文件时出现错误
JIMS.exe
--------->Reporting
------------------->JIMS.Printing.dll
------------------->Templates
-----------------------------> Files
Run Code Online (Sandbox Code Playgroud)
码:
string _templatePath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(typeof(JIMS.Printing.PrintInvoice)).Location), "Templates");
Run Code Online (Sandbox Code Playgroud)
来自JIMS.Printing.dll的代码
JIMS.exe在JIMS.exe Path\Templates \文件中查找文件,但实际上该文件位于JIMS.Printing.dll Path\Templates\files中
我在以下位置有EXE:
C:\Projects\Bin\Sample.EXE
Run Code Online (Sandbox Code Playgroud)
我想在C#中获取这样的路径:
C:\Projects\
Run Code Online (Sandbox Code Playgroud)
一种方法是:
string str = "C:\\Projects\\Bin\\Sample.EXE"
string res = str.Replace("Bin", "")
Run Code Online (Sandbox Code Playgroud)
但这不是一种有效的方法.我的Bin文件夹可以改为Bin1,Bin2等等......所以Bin名字是不是恒定的.它也可以C:\\Projects\\Debug\\Sample.EXE.基本上,我想在目录结构中向上移动一级.
你能给我提供示例代码吗?
以下是我要查找的示例代码:
@marc_s代码
这与上面两个问题完全不同,我没有使用前面的两个链接找到我的问题的解决方案.
@"F:\LEAFPRODUCT\Bin\Service.exe"
Run Code Online (Sandbox Code Playgroud)
这是物理路径Service.exe,让我知道是否有任何其他替代方式或任何一般方法来查找WrmService.exe窗口应用程序中的物理路径.
在Web应用程序中,我们可以Server.MapPath像这样使用.在这里,我需要减少路径的意思
label1.Text = AssemblyName.GetAssemblyName(@"F:\LEAFPRODUCT\Bin\Service.exe").Version.ToString();
Run Code Online (Sandbox Code Playgroud)
这是我需要在这里减少物理路径的编码,这意味着我不想把这种方式放在我需要的所有文件夹中
label1.Text = AssemblyName.GetAssemblyName("WrmService.exe").Version.ToString();
Run Code Online (Sandbox Code Playgroud)
表示此处仅显示所需的文件名 WrmService.exe
我有一个带有以下代码的应用程序 .NET core 2.1:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Assets")),
RequestPath = "/Assets"
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
和我的结构文件夹:
但这些网址都没有打开图像:
“my-website.com/images/snes/alien.jpg”
“my-website.com/wwwroot/images/snes/alien.jpg”
“my-website.com/Assets/Snes/alien.jpg”
有人知道出了什么问题吗?
编辑:这是 CurrentDirectoy() 方法获取的文件夹(显然是正确的):
Edit2:使用此代码在 localhost 上工作,但在我在 azure 上发布时却没有:
app.UseFileServer(
new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
});
Run Code Online (Sandbox Code Playgroud) c# ×13
.net ×5
asp.net-core ×3
asp.net ×2
.net-core ×1
attributes ×1
dll ×1
filepath ×1
log4net ×1
reflection ×1
selenium ×1
specflow ×1
wcf ×1
winforms ×1
wpf ×1