c#在程序集外读取资源.resx文件时会抛出MissingManifestResourceException

本文关键字:MissingManifestResourceException 文件 resx 程序集 读取 资源 | 更新日期: 2023-09-27 18:11:20

我正在做一个项目,其中包括Asp。Net web应用程序和windows服务应用程序。这两个可以使用我创建的一个包含资源文件的共同项目。我想把资源文件放在程序集的外面,所以当我想要更改它们时,它们可以在不编译所有解决方案的情况下进行编辑。我搜索了一个方法,在这里找到了一个;

ASP。. NET资源管理器读取本地.resx

它在web应用程序上工作得很好,但过了一会儿,我看到windows服务应用程序无法读取资源,我得到

System.Resources.MissingManifestResourceException: Could not find any resources appropriate for the specified culture (or the neutral culture) on disk.
baseName: abc  locationInfo: <null>  fileName: abc.resx
   at System.Resources.FileBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
   at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
   at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
   at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
   at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture)
   at yyyy.yyyyyy.yyyyyyy.GetGlobalResourceObject(String classKey, String resourceKey, Boolean getCommon)
   at xxx.xxx.xxx.Entities.xxxxxxxx.get_LocalizedName()
   at yyyyy.Adapters.ArchiverDtoAdapter.CreateArchiverInjectionsDto(InjectionProcedure procedure, INamingService namingService)
   at yyyyy.Adapters.ArchiverDtoAdapter.ConvertInjectionProcedureDto(InjectionProcedure procedure, INamingService namingService)
   at yyyy.Factories.ArchiverDtoFactory.<>c__DisplayClass1.<CreateInjectionProcedureSendRequestDto>b__0(IUnitOfWork unitOfWork)
   at Core.Data.NHibernate.Factory.UnitOfWorkFactoryBase.Create(Action`1 action, IUnitOfWork unitOfWork)
   at Core.Data.NHibernate.Factory.UnitOfWorkFactory.Create(Action`1 action)

我不明白这个问题,因为,我的项目工作正确,而另一个不是。另一个奇怪的行为是,当我在我的机器上启动服务并调试以查看发生了什么时,它工作了。

更新:这是我使用的代码作为参考

public class ResxResourceManager : ResourceManager
    {
        public ResxResourceManager(string baseName, string resourceDir)
        {
            ObjectFactory.ResolveDependencies(this);
            Type[] paramTypes = new Type[] { typeof(string), typeof(string), typeof(Type) };
            object[] paramValues = new object[] { baseName, resourceDir, typeof(ResXResourceSet) };
            Type baseType = GetType().BaseType;
            ConstructorInfo ci = baseType.GetConstructor(
                BindingFlags.Instance | BindingFlags.NonPublic,
                null, paramTypes, null);
            ci.Invoke(this, paramValues);
        }
        protected override string GetResourceFileName(CultureInfo culture)
        {
            string resourceFileName = base.GetResourceFileName(culture);
            return resourceFileName.Replace(".resources", ".resx");
        }
    }

c#在程序集外读取资源.resx文件时会抛出MissingManifestResourceException

请查看一下。希望对你有帮助。

http://support.microsoft.com/kb/839861

相关文章:
  • 没有找到相关文章