1

非常に大きな DLL (非常に大きなネイティブ ライブラリのバインディング) を参照するプロジェクトを使用して、Xamarin.iOS でソリューションを提供しています。したがって、ソリューションのビルド時間は非常に長くなります。ソースファイルを簡単に変更した後、リンクを待つ必要があります。したがって、私の考えは、カスタム プロパティを使用してプロジェクトから参照を除外し、.cs ファイルで使用する定義を作成して、大規模なアセンブリに依存するコードを除外することでした。しかし、カスタム条件を使用して参照を除外することはできません。次の戦略は、Xamarin.iOS では機能しません (ただし、Visual Studio では機能します)。

ファイル 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 属性はプロパティ $(Configuration) および $(Platform) に対してのみ機能します。つまり、次のコードは、構成に応じてモノタッチを含めたり除外したりします。

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

独自の条件付きプロパティを使用するなど、アセンブリ参照をカスタマイズすることはできますか?

4

1 に答える 1

4

Debug からコピーした新しいビルド構成を追加することで問題を解決しました。DebugNoLargeLib という名前を付けました。$(Configuration) プロパティが正しく解析されるため、次のコードで参照を除外できます。

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

構成DebugNoLargeLibのコンパイラセクションにプリプロセッサディレクティブNO_LARGE_LIBを追加した後。

そのため、大きなライブラリなしでリンクし、それに依存するコードをコンパイルから除外できるようになりました。

しかし、これは Microsoft の仕様に従ってプロジェクト ファイルの処理が完全にサポートされていないという Xamarin 側の間違いだと思います。

于 2013-12-24T10:19:26.883 に答える