在.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();
}
}
答案 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?
我认为这更符合您的要求;)因为它适用于两种情况(胜利和网络)