0

У меня есть решение в Xamarin.iOS с проектом, который ссылается на очень большую DLL (привязка к очень большой родной библиотеке). Поэтому время сборки для решения очень велико. После простой модификации в любом исходном файле мне нужно дождаться ссылки. Поэтому моя идея состояла в том, чтобы исключить ссылку из проекта с использованием настраиваемого свойства, а также определить, что я буду использовать в файлах .cs, чтобы исключить код, который зависит от большой сборки. Но я не могу использовать настраиваемое условие, чтобы исключить ссылку. Следующая стратегия не будет работать для Xamarin.iOS (но будет работать в Visual Studio):Как исключить ссылку на сборку с использованием пользовательских условных свойств в проекте 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 может быть импортирован в любую сборку, которая зависит от особенностей большой библиотеки.

В файле проекта .csproj импорта выше файла и попытаться исключить ссылки (например MonoTouch):

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

Я попытался также определить свойство $ (LinkWithLargeAssembly) непосредственно в файле проекта без импорта , Также я попытался использовать уже определенные свойства, например $ (RootNamespace) и $ (AssemblyName). Атрибут Condition работает только для свойств $ (Конфигурация) и $ (Платформа). То есть следующий код будет включать и исключать MonoTouch в зависимости от конфигурации:

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

Можно ли настроить ссылку на сборку в том числе с использованием своих собственных условных свойств?

ответ

3

Я решил проблему, добавив новую конфигурацию сборки, которая была скопирована из Debug. Я назвал его DebugNoLargeLib. Таким образом, можно исключить ссылку со следующим кодом, потому что свойство $ (Configuration) будут корректно распознаны:

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

После того как я добавил директиву препроцессора NO_LARGE_LIB в разделе компилятора для конфигурации DebugNoLargeLib.

Так что теперь я могу связать без большой библиотеки и исключить код в зависимости от него из компиляции.

Но я думаю, что это ошибка со стороны Xamarin, что обработка файлов проекта не полностью поддерживается в соответствии с спецификациями Microsoft.