2011-10-28 3 views
0

에 의해라는 닷넷 COM 개체에서 나는 .NET COM 개체를 인스턴스화하고하고 ConfigurationManager.AppSettingsConfigurationManager.ConnectionStrings를 업데이 트하려는 동안 ConfigurationManager.App/ConnectionSettings을 편집하려면 어떻게 속성 조립 설정 파일에 설정이 있어도 알 수있었습니다. "ComLib.dll.config" 런타임에는 이러한 설정을 사용할 수 없습니다.나는 ASP 고전 웹 페이지

Dim COMObject 
Set COMObject = Server.CreateObject("COMAPI.COMObject") 

내 .NET의 COM 개체의 생성자를 한 단계 내 VS2010 디버거를 사용 (COMAPI.COMObject :

나는 다음을 사용하여 ASP 클래식 웹 페이지에서 COM 개체를 생성하기 위해 전화를 걸). 이것은 내가로드 된 내용을 확인하기 위해 ConfigurationManager을 조사한 것입니다.

모두 "Assembly.GetExecutingAssembly""Assembly.GetCallingAssembly""ComLib.dll" 어셈블리 등록 위치의 전체 경로 동일한 결과를 갖는다. 나는 그것이 무엇을 기대하고있다. 또한이 위치에는 "ComLib.dll.config" 파일이 있는데이 파일은 ConfigurationManager으로 전달되지 않습니다.

나는 예외가 발생 다음 명령을 사용하여 appSettings는을 취소 할 때 :

ConfigurationManager.AppSettings.Clear(); 

는 예외입니다 : : "서버 객체 006 ~ ASP 0177 ~ Server.CreateObject를가 ~ 80131902 실패"

내 생각에 위의 예외는 "AppSettings는 읽기 전용 임"이라는 ASP 클래식 해석이지만 100 % 확실하지는 않습니다.

나는 항목을 설정 ConfigurationManager.AppSettings로 부가 appSettings는 각 통해 실행 후 "ComLib.dll.config" 파일을로드하고로 이동하지만 그뿐만 아니라 예외가 발생 무엇 : "서버 개체 : 006 ~ ASP 0177 ~ Server.CreateObject가 실패했습니다 ~ 80131902".

Assembly comApiAssembly = Assembly.GetExecutingAssembly(); string comApiLocation = comApiAssembly.Location; configuration = null; configuration = ConfigurationManager.OpenExeConfiguration(comApiLocation); var toLoadEnumberable = configuration.AppSettings.Settings.GetEnumerator(); while (toLoadEnumberable.MoveNext()) { var current = (KeyValueConfigurationElement)toLoadEnumberable.Current; ConfigurationManager.AppSettings.Add(current.Key, current.Value); } 

나는 다른 .NET에 대한 호출을 만드는 데 사용됩니다이 .NET COM LIB로 의 ConfigurationManager 내 구성 정보에 대한 자세한 내용은 다음과 같이

나는 .NET COM 개체에서 사용하는 코드는 어셈블리. 다른 .NET 어셈블리에는 구성이 필요합니다.

미리 감사드립니다.

답변

2

나는 약간 help from the MSDN forums을 얻을 수있었습니다.

기본적으로 ConfigurationManager에서 .Clear/.Add/.Remove를 사용하는 대신.

ConfigurationManager.AppSettings["Key"] = "KeyValue"; 

이것은 ConfigurationManager.AppSettings를 업데이트 : 그것은 존재 여부 및 해당 키에 대한 값을 설정하면 appSettings는 내가, 설정에 액세스 할 수 있습니다. 이것은 초기 "ASP 클래식"-> "COM API"호출 범위를 벗어난 응용 프로그램의 부분에 액세스 할 때 ConfigurationManager에서 응용 프로그램 설정을 가져올 수 있기 때문에 좋습니다.

이 모든 것에서 나는 아직도 ConfigurationManager.ConnectionStrings를 편집하는 방법을 모른다.

내가 예외가 발생 ConnectionStrings하는 명확한/.Add/.Remove을 시도하십시오. 이 문제에 대한 아이디어가 있습니까?

자세한 정보는이 답변을 업데이트합니다.

업데이트로 : 설정이없는 ConnectionString 설정을 피하기 위해 Unity Container IoC 프레임 워크를 구현했습니다. Static 인스턴스를 사용하여 IoC 컨테이너를 호스팅하고 그런 식으로 인스턴스를 해결합니다.

이렇게하면 COM API의 클래스 유형에 대한 인터페이스를 등록 할 수 있습니다. 즉, 생성자 삽입을 통해 연결 문자열 설정을 전달할 수 있음을 의미합니다. 연결 문자열 설정이 범위에 포함되어 있으므로 해결할 인스턴스를 원합니다.

관련 문제