C# 我是否可以使用反射在ASP.NET中查找bin/[Configuration]文件夹而不是ASP临时文件夹

C# 我是否可以使用反射在ASP.NET中查找bin/[Configuration]文件夹而不是ASP临时文件夹,c#,asp.net,reflection,C#,Asp.net,Reflection,我有一个ASP.NET网站,我想找到/bin/[Configuration]文件夹以使用外部工具(exe文件)。当我使用反射获取调用程序集的位置时,它返回类似以下内容: C:\Windows\Microsoft.NET\Framework\\\…\ASP.NET临时文件\a1388a5e\\…\my.dll 由于每个dll在temp ASP.NET文件下都有自己的目录,因此我无法执行此操作 如何获取已编译二进制文件夹的位置,其中dll和.exe是(即bin/)而不是asp.net的临时缓存 注释

我有一个ASP.NET网站,我想找到/bin/[Configuration]文件夹以使用外部工具(exe文件)。当我使用反射获取调用程序集的位置时,它返回类似以下内容:

C:\Windows\Microsoft.NET\Framework\\\…\ASP.NET临时文件\a1388a5e\\…\my.dll

由于每个dll在temp ASP.NET文件下都有自己的目录,因此我无法执行此操作

如何获取已编译二进制文件夹的位置,其中dll和.exe是(即bin/)而不是asp.net的临时缓存

注释

  • 此代码位于支持库中,可以从ASP.NET网站或其他控制台/windows应用程序调用该库

Server.MapPath(“~\bin”)

有什么理由不这么做吗

Server.MapPath("~/bin");

您可以尝试(摘自):

我设置了一个快速测试:

  • 在VS dev服务器(已编译站点,/bin目录等)下运行的Web应用程序项目
  • 由WA引用的类库项目
  • 在web应用程序中,我创建了一个从库项目调用以下方法的页面:

    using System.IO;
    using System.Reflection;
    
    namespace TestHelpers {
      public class ClassHelpers {
        public static string PathToBin() {
          return Path.GetDirectoryName(
                   Assembly.GetExecutingAssembly().GetName().CodeBase);
        }
      }
    }
    
这导致页面上出现以下输出:

文件:\C:\Users\UserName\Documents\Visual Studio 2008\Websites\Solution\Project\bin


这正是我所期望的。

它位于支持库中,可以从ASP.NET调用,也可以从常规的c#windows应用程序调用。在这种情况下,它需要作为支持库配置的一部分,或者您需要在其中一个方法中传入所需的路径。该路径位于支持库中,该库可以从ASP.NET调用,也可以从常规的c#windows应用程序调用。一旦找到程序集(/它们),您将尝试对程序集执行什么操作?你甚至需要知道物理文件的位置吗?我需要运行一个exe,它位于bin/[Configuration]中。现在我正在手动配置位置。我希望它更通用一些。当从“其他控制台/windows应用程序”调用它时,它如何知道该网站?>“如何获取二进制文件的位置,而不是asp.net的临时缓存?”哪个二进制文件?你自己的,还是呼叫二进制?它没有,我也不想。这是一个c#库,它有一个第三方.exe,它与libraries.dll一起复制到最终的bin/[Config]目录中。库必须运行.exe,并且由于所有不同的版本都位于不同的位置,因此必须对其进行配置或自行配置。现在我正在配置它(在global.asax中,因为我必须找到网站的bin目录)。我希望它能检测出垃圾箱在哪里。这看起来很有希望,我今天晚些时候会试试!自从你回答这个问题后,我已经用过很多次了,我希望每次都能投上一票。呵呵,没问题——这个评论够了:)
using System.IO;
using System.Reflection;

namespace TestHelpers {
  public class ClassHelpers {
    public static string PathToBin() {
      return Path.GetDirectoryName(
               Assembly.GetExecutingAssembly().GetName().CodeBase);
    }
  }
}