2010-03-11 42 views
6

我有一个ASP.NET网站,我想查找/ bin/[Configuration]文件夹以使用外部工具(一个exe文件)。当我使用反射来获取调用组件的位置返回类似于:我可以使用反射来查找ASP.NET中的bin/[Configuration]文件夹而不是asp临时文件夹

C:\Windows\Microsoft.NET\Framework\\...\Temporary ASP.NET Files\a1388a5e\\...\my.dll

由于每个DLL有临时ASP.NET文件在其自己的目录失败对我来说。

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

注意

  • 此代码是可以从ASP.NET网站或其他控制台/的Windows应用程序被称为支持库。
+0

当它从“其他控制台/ Windows应用程序”调用时,它是如何知道该网站的? – 2010-03-11 20:20:26

+0

>“如何获取二进制文件的位置,而不是asp.net的临时缓存?”哪个二进制?你自己的,还是调用二进制文件? – 2010-03-11 21:18:19

+0

它不,我也不希望它。这是一个c#库,它有一个第三方的.exe文件,它与库.dll一起被复制到最终的bin/[Config]目录中。库必须运行.exe,因为所有不同的版本都在不同的位置,所以它必须被配置或配置自己。现在我正在配置它(在global.asax中,因为我必须为网站找到bin目录)。我希望能够检测到垃圾箱的位置。 – vfilby 2010-03-11 21:18:39

回答

13

你可以尝试(从How to: Get the Application Directory拍摄):

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); 

我成立了一个快速测试用:

  • 的VS开发服务器下运行的Web应用程序项目(编译网站,/ bin中目录等)。
  • 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 \ 用户名 \ Documents \ Visual Studio 2008 \ Websites \ 解决方案 \ 项目 \ bin

这是我所期望的。

+0

看起来很有前途,今天晚些时候我会试试! – vfilby 2010-03-12 17:40:27

+2

自从你回答以来,我已经使用了很多次,希望我可以为每次使用投票。 – vfilby 2010-04-19 15:17:40

+0

呵呵,没有probs - 那个评论就够了:) – 2010-04-19 15:35:11

4

使用Server.Mappath( “〜\ BIN”)

+0

这是一个可以从ASP.NET调用的支持库,也可以从常规的c#windows应用程序调用。 – vfilby 2010-03-11 19:13:39

+0

在这种情况下,它需要成为支持库配置的一部分,或者您需要在其中一个方法中传递所需的路径。 – Bryan 2010-03-11 21:09:53

0

任何理由不只是做

Server.MapPath("~/bin"); 

+0

这是在一个可以从ASP.NET调用的支持库中,或者可以从常规的c#windows应用程序中调用。 – vfilby 2010-03-11 19:15:21

+0

一旦你找到它(/他们),你想要做什么?你甚至需要知道物理文件的位置? – Paul 2010-03-11 20:40:36

+0

其需要运行的exe文件位于bin/[配置]中。现在我正在手动配置位置。我希望能让它更通用一些。 – vfilby 2010-03-11 20:55:57

相关问题