2011-02-08 44 views
1

在.NET解决方案中,我使用自定义类进行翻译。 翻译框架的主要思想 将带有翻译的文件放在装配体附近的文件夹中。IIS 7如何从Bin文件夹加载程序集

当它从Windows窗体应用程序调用时,所有工作都很好。 但是,当我从Web服务调用它时,它不起作用...

我通过Visual Studio 2010调试Web服务并通过bult-in调试器。 我看到BUIT的ASP.NET Developpment从 Çassemply loades:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \临时ASP.NET文件\

,有没有可能找到我的文件夹与翻译...

所以建议请在这种情况下做什么?

我在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(); 
    } 
} 

回答

0

在Web应用程序,您的组件将位于bin文件夹中。假设你的配置文件是一层,在你的应用程序的根目录下,你可以使用Server.MapPath来获得它的路径,就像这样(你需要引用System.Web)。

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

这是好的,但我必须在Windows服务也运行相同的代码..所以问题存在:如何确定代码是从iis调用? – TheNIK 2011-02-08 17:49:57

+0

检查`HttpContext.Current`是否为`null`,如果是的话就使用你现有的代码。如果没有,运行这个。 – wsanville 2011-02-08 17:54:31

1

在网络环境下,其通常设置在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... 
} 
+0

好吧,有可能, – TheNIK 2011-02-08 17:46:56

0

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

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