2013-03-06 4 views
1

내가 Spring.net에 이상한 문제가, .NET 3.5에서 4Spring.Net 자리 표시 자 예외

날 우리의 아키텍처를 요약 해 보자 .NET으로 : 아래 ( 을 투사하지 내

<constructor-arg name="Url" value="${configurationProvider.url}" /> 

프로젝트 B (내 프로젝트, 내 통제하에)이 설정의 값과 다른 설정 파일이 있습니다 :

를 제어)이 같은 설정 (configurationProvider.url)를 참조하는 Sprint.Net의 설정을 가지고
<configuration> 
    <Environment> 
    <add key="Dashboard.Environment"  value="UAT" /> 
    <add key="configurationProvider.url" value="http://something/ConfigurationProvider.asmx"/> 
    <add key="pkicheck.url"    value="http://something/webservices/pkicheck.asmx"/> 
    <add key="sso.url"     value="http://something/webservices/ssoclient.asmx"/> 
    </Environment> 
</configuration> 

프로젝트 B가 .NET 3.5 일 때 모두 잘 작동합니다. .NET 4에이 프로젝트를 변환 (그 유일한 변화의) 때 는, 모든 게 실패 시작하고, 그것은 나에게이 예외주고 :

Could not resolve placeholder 'configurationProvider.url' 

그것은 분명히 ProjectB 구성 파일의 구성 설정을 찾는되지 않습니다 ,이 파일은 거기에 있고 값을 포함하고 있습니다. 3.5과 4 사이에 어떤 변경 사항이있을 수 있습니까?

전체 예외 :

<ConfigurationErrorsException d1p1:type="ConfigurationErrorsException"> 
<ClassName>System.Configuration.ConfigurationErrorsException</ClassName> 
<Message>Error creating context 'spring.root': Error registering object with name 'configurationProvider' defined in 'assembly [ProjectA.Core, Version=0.0.0.88, Culture=neutral, PublicKeyToken=1b28b51fb20f454e], resource [ProjectA.Core.Framework.config] line 111' : Could not resolve placeholder 'configurationProvider.url'.</Message> 
<Data d1p1:type="IDictionary"/> 
<InnerException d1p1:type="Exception"> 
<ClassName>Spring.Objects.Factory.ObjectDefinitionStoreException</ClassName> 
<Message>Error registering object with name 'configurationProvider' defined in 'assembly [ProjectA.Core, Version=0.0.0.88, Culture=neutral, PublicKeyToken=1b28b51fb20f454e], resource [ProjectA.Core.Framework.config] line 111' : Could not resolve placeholder 'configurationProvider.url'.</Message> 
<Data d1p1:type="IDictionary"/> 
<InnerException d1p1:type="Exception"/> 
<HelpURL/> 
<StackTraceString> at Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer.ProcessProperties(IConfigurableListableObjectFactory factory, NameValueCollection props) at Spring.Objects.Factory.Config.PropertyResourceConfigurer.PostProcessObjectFactory(IConfigurableListableObjectFactory factory) at Spring.Context.Support.AbstractApplicationContext.ProcessObjectFactoryPostProcessors(IList objectFactoryPostProcessors) at Spring.Context.Support.AbstractApplicationContext.InvokeObjectFactoryPostProcessors() at Spring.Context.Support.AbstractApplicationContext.Refresh() at Spring.Context.Support.XmlApplicationContext..ctor(Boolean refresh, String name, Boolean caseSensitive, IApplicationContext parentContext, String[] configurationLocations) at Spring.Context.Support.XmlApplicationContext..ctor(String name, Boolean caseSensitive, String[] configurationLocations) at _dynamic_Spring.Context.Support.XmlApplicationContext..ctor(Object[]) at Spring.Reflection.Dynamic.SafeConstructor.Invoke(Object[] arguments) at Spring.Context.Support.ContextHandler.RootContextInstantiator.InvokeContextConstructor(ConstructorInfo ctor) at Spring.Context.Support.ContextHandler.ContextInstantiator.InstantiateContext() at Spring.Context.Support.ContextHandler.InstantiateContext(IApplicationContext parentContext, Object configContext, String contextName, Type contextType, Boolean caseSensitive, String[] resources) at Spring.Context.Support.ContextHandler.Create(Object parent, Object configContext, XmlNode section)</StackTraceString> 
<RemoteStackTraceString/> 
<RemoteStackIndex>0</RemoteStackIndex> 
<ExceptionMethod>8 ProcessProperties Spring.Core, Version=1.3.0.20349, Culture=neutral, PublicKeyToken=65e474d141e25e07 Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer Void ProcessProperties(Spring.Objects.Factory.Config.IConfigurableListableObjectFactory, System.Collections.Specialized.NameValueCollection)</ExceptionMethod> 
<HResult>-2146232832</HResult> 
<Source>Spring.Core</Source> 
<WatsonBuckets d1p1:type="System.Byte"d1p1:includeArrayAttribute="true"/> 
<_resourceDescription>assembly [ProjectA.Core, Version=0.0.0.88, Culture=neutral, PublicKeyToken=1b28b51fb20f454e], resource [ProjectA.Core.Framework.config] line 111</_resourceDescription> 
<_objectName>configurationProvider</_objectName> 
</InnerException> 
<HelpURL/> 
<StackTraceString> at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult) at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) at System.Configuration.BaseConfigurationRecord.GetSection(String configKey) at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) at System.Configuration.ConfigurationManager.GetSection(String sectionName) at Spring.Util.ConfigurationUtils.GetSection(String sectionName) at Spring.Context.Support.ContextRegistry.InitializeContextIfNeeded() at Spring.Context.Support.ContextRegistry.GetContext() at ProjectA.Core.Controller.Initialise(String flavour) in d:\TeamCity8100\buildAgent\work\850180d7b576030f\Code\Src\ProjectA\Framework\Core\Controller.cs:line 238</StackTraceString> 
<RemoteStackTraceString/> 
<RemoteStackIndex>0</RemoteStackIndex> 
<ExceptionMethod>8 EvaluateOne System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a System.Configuration.BaseConfigurationRecord System.Object EvaluateOne(System.String[], System.Configuration.SectionInput, Boolean, System.Configuration.FactoryRecord, System.Configuration.SectionRecord, System.Object)</ExceptionMethod> 
<HResult>-2146232062</HResult> 
<Source>System.Configuration</Source> 
<WatsonBuckets d1p1:type="System.Byte"d1p1:includeArrayAttribute="true"/> 
<filename d1p1:type="Object"/> 
<line>0</line> 
<firstFilename d1p1:type="Object"/> 
<firstLine>0</firstLine> 
<count>0</count> 
</ConfigurationErrorsException> 
+0

관련 설정 섹션이나 전체 파일 인 app.config/Web.config (여기서 web.config의 configSections 부분) 및 PropertyPlaceholderConfigurer 개체 구성을 게시하십시오. – Andreas

답변

1

나는 결국 문제를 발견했다. 우리 config에서 PropertyPlaceholderConfigurer를 사용하고 결코 "Order"속성을 설정하지 않습니다. 그래서 Spring은 Order에서 "ordering"했지만, Order는 항상 int.Max와 같기 때문에 순서 출력은 비 결정적입니다.

구성 파일에 주문을 추가하면 해결되었습니다.

+1

해결 방법에 대한 예를 제공해 주시겠습니까? (코드를 보여주십시오) – RuudKok