0

매우 큰 DLL (매우 큰 기본 라이브러리에 대한 바인딩)을 참조하는 프로젝트가있는 Xamarin.iOS의 솔루션이 있습니다. 따라서 솔루션 구축 시간이 매우 깁니다. 모든 소스 파일에서 간단한 수정을 한 후 링크를 ​​기다려야합니다. 그래서 내 생각은 프로젝트에서 커스텀 속성을 사용하여 레퍼런스를 제외하고 커다란 어셈블리에 의존하는 코드를 제외하기 위해 .cs 파일에서 사용할 것을 정의했다. 하지만 사용자 지정 조건을 사용하여 참조를 제외 할 수 없습니다. 다음 전략 Xamarin.iOS 작동하지 않습니다 (하지만 비주얼 스튜디오에서 작동) :Xamarin.iOS 프로젝트에서 사용자 정의 조건부 속성을 사용하여 어셈블리 참조를 제외하는 방법

이 파일 CommonProperties.prop 만들기 :

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <LinkWithLargeAssembly>True</LinkWithLargeAssembly> 
    </PropertyGroup> 
</Project> 

그래서 생각이다 : 그것은 중요하지 언제 LinkWithLargeAssembly를 정의 할 수 있습니다 False로 설정하고 내 프로젝트를 빠르게 연결합니다. CommonProperties.prop은 큰 라이브러리의 기능에 의존하는 모든 어셈블리에서 가져올 수 있습니다. 수입없이 프로젝트 파일에 직접 I는 재산 $ (LinkWithLargeAssembly)를 정의하는 것도 시도했다

... 
<Import Project="CommonProperties.prop" /> 
... 
<ItemGroup> 
    <Reference Include="monotouch" Condition=" '$(LinkWithLargeAssembly)' == 'True' " /> 
</ItemGroup> 
... 

:

파일 위의 프로젝트 파일 .csproj 수입에서

과은 (예를 들어 monotouch에 대한) 참조를 제외하려고 . 또한 예를 들어 $ (RootNamespace) 및 $ (AssemblyName)에 이미 정의 된 속성을 사용하려고했습니다. 하지만 Condition 속성은 $ (Configuration) 및 $ (Platform) 속성에서만 작동합니다. 다음 코드는 구성에 따라 모노 터치를 포함 및 제외합니다.

<ItemGroup> 
    <Reference Include="monotouch" Condition=" '$(Configuration)' == 'Debug' " /> 
</ItemGroup> 

내 조건부 속성을 사용하여 어셈블리 참조를 사용자 정의 할 수 있습니까?

답변

3

디버그에서 복사 한 새로운 빌드 구성을 추가하여이 문제를 해결했습니다. 나는 DebugNoLargeLib이라는 이름을 붙였다. $ (구성) 속성이 올바르게 구문 분석 할 수 있기 때문에 그래서 나는 다음과 같은 코드로 참조를 제외 할 수

<ItemGroup> 
    <Reference Include="SomeLargeLib.dll" Condition=" '$(Configuration)' != 'DebugNoLargeLib' " /> 
</ItemGroup> 

을 내가 구성 DebugNoLargeLib은 컴파일러 섹션 처리기 지시문의 NO_LARGE_LIB을 추가 한 후.

그래서 이제는 커다란 라이브러리없이 링크 할 수 있고 컴파일에 따라 코드를 제외 할 수 있습니다.

그러나 이것은 Xamarin 측의 실수로 Microsoft의 사양에 따라 프로젝트 파일 처리가 완전히 지원되지 않는다고 생각합니다.