IIS 7如何从Bin文件夹加载程序集

时间:2011-02-08 17:29:46

标签: c# .net asp.net webservice-client .net-assembly

在.NET解决方案中,我使用自定义类进行翻译。 翻译框架的主要思想 带翻译的文件放在汇编附近的文件夹中。

从Windows窗体应用程序调用时,所有工作正常。 但是当我从网络服务中调用它时它不起作用......

我通过Visual Studio 2010和bult-in调试器调试Web服务。 而且我看到了ASP.NET Developpment中的buit-in C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \

并且无法找到包含翻译的文件夹...

所以建议在这种情况下该怎么做?

我在IIS7下测试它也不起作用。

示例代码我如何加载程序集:

if (languageSettings == null)                   
{
   TraceIt(assembly.Location);
   string strPath = Path.Combine(Path.GetDirectoryName(assembly.Location), "Language.config");
   TraceIt(strPath);
   languageSettings = new LanguageSettings(strPath);
   if (!languageSettings.LoadSettings())
   {
      languageSettings.CurrentLanguage = DefaultLocale;
      languageSettings.SaveSettings();
   }
}

4 个答案:

答案 0 :(得分:1)

在Web环境中,通常使用语言数据文件夹的绝对路径在web.config中设置一个键,而不是依赖于执行文件夹中的查找:

<appSettings>
  <add key="Languages" value="D:\Data\Languages" />
</appSettings>

,代码

stirng path = ConfigurationManager.AppSettings["Languages"]
if (!String.IsNullOrEmplty(path))
{
    string file = Path.Combine(path, filename);
    // and so on...
}

答案 1 :(得分:0)

在Web应用程序中,程序集将位于bin文件夹中。假设您的配置文件是一级的,在应用程序的根目录下,您可以使用Server.MapPath获取其路径,如下所示(您需要引用System.Web)。

string strPath = HttpContext.Current.Server.MapPath("~/Language.config");

答案 2 :(得分:0)

您可以尝试从类型中获取位置。例如:

string strPath = 
   Path.Combine(
      Path.GetDirectoryName(typeof(LanguageSettings).Assembly.Location),
      "Language.config");

答案 3 :(得分:0)

看看John Sibly给出的解决方案:

How do I get the path of the assembly the code is in?

我认为这更符合您的要求;)因为它适用于两种情况(胜利和网络)