다른 사람들이 자신의 프로젝트에서 컴파일 된 DLL로 참조 할 수있게 해주는 내부 API가 있습니다. 참조되는 독립 실행 형 프로젝트 인 경우 조건부 컴파일 (#if 문)을 사용하여 컴파일 기호에 따라 주요 웹 서비스 클래스의 동작을 전환합니다. 문제는 일단 어셈블리가 생성되면 원래 컴파일되었을 때 컴파일 기호가 무엇이든간에 고정되어있는 것처럼 보입니다. 예를 들어이 어셈블리가 DEBUG로 컴파일되고 다른 프로젝트가 참조하는 경우 (다른 프로젝트가 RELEASE로 빌드 된 어셈블리는 재 컴파일이 필요하지 않으므로 DEBUG에있는 것처럼 작동합니다. 그것은 의미가 있으며, 단지 배경을 제공합니다.C#의 조건부 컴파일 해커 -이 문제를 해결할 방법이 있습니까?
이제는 스위치의 app/web 구성 파일을 검색하는 등의 다른 방법으로 어셈블리의 동작을 전환 할 수 있도록 노력하고 있습니다. 문제는 그 전환 된 어셈블리의 코드 중 일부는 사이, 예를 들어, 방법에 대한 속성입니다입니다 :
#if PRODUCTION
[SoapDocumentMethodAttribute("https://prodServer/Service_Test", RequestNamespace = "https://prodServer", ResponseNamespace = "https://prodServer")]
#else
[SoapDocumentMethodAttribute("https://devServer/Service_Test", RequestNamespace = "https://devServer", ResponseNamespace = "https://devServer")]
#endif
public string Service_Test()
{
// test service
}
나 다른 방식으로 동일한 유형의 두 속성 사이에 뒤집을 수있는 몇 가지 구문 설탕이있을 수 있지만 , 나는 그것을 모른다. 어떤 아이디어?
대체 방법은 어셈블리 대신 전체 프로젝트를 참조하는 것이지만 가능한 경우 컴파일 된 DLL을 참조하는 것이 좋습니다. 또한 문제가 해결되면 완전히 새로운 접근 방식을 사용할 수 있습니다.
+1에 따라
SoapDocumentMethodAttribute
에서 유래하고,이 값을 설정하는 새로운 속성을 만들어야합니다! 하지만 당신은 단지 const를 취할 수 있습니다. – chriszero예, 조건부 컴파일은 내가 그 길로 향하고 있다는 것을 깨달았을 때 "오, 젠장, 이봐"순간이었습니다. 나는 반사에 대해 살펴보고, 그 경로가가는 것이면 두려워하지 않을 것입니다. 속성을 채우는 문자열은 const가되어야한다는 것을 알고 있습니다. 런타임시 설정 파일에서 읽을 수 없으므로 조건부 전환이 가능합니다. 그래도 그 시점에서 잘못되고 싶다. – Chris
이 답변은 덜 무례 함으로 개선 될 수 있습니다. – Outback