私はcsprojファイルのコレクションを持っていますが、すべて同じソースファイルセットを参照していますが、ターゲットデータはわずかに異なります。例えば。同じプロジェクトのWinPhone、XBox、Desktop、MonoTouchの亜種があります。MonoとMonoDevelopを使用したC#プロジェクトファイルのマルチターゲット化
コンパイルする.csファイルのリストのように、実際に複製されているものについては、リストを1つのファイルにまとめて、すべてのパターンが同期していることを確認する必要はありません。私はもともと.csprojsからソースを削除して、すべてのcsprojsによってインポートされた.targetsファイルにそれらを入れてみましたが、ソースファイルはVSとMonoDevelopの両方から消えました。
私の2回目の試みは、Desktop csprojファイルを主なものにし、すべてのバリエーションがいくつかの条件付きロジックでそのcsprojをインポートするようにすることでした。これにより、ソースファイルはメインのcsprojから編集可能になり、すべてのフレーバに組み込まれます。今私は何をしようとしていたのですが、MonoDevelopはビルドできません。 MonoDevelopソリューションでは、コアDLLのiOSバージョンがグレー表示され、「(アクティブな構成ではビルドされていません」)
また、MonoDevelopが持つ問題を乗り越えていると思われるcsprojとソリューションをxbuildingモノトックアセンブリを解決することに関連する他の事にはちょっとした問題があります。私はMonoDevelopがxbuildを使用していると思っていましたが、おそらくそうではありませんか?
これはWindows msbuildで動作するため、Monoではバグかサポートされていない機能のようです。あるいは、シナリオ全体に取り組むより良い方法があるかもしれません...私はここで尋ねると思っていました。詳細については
、 マイCore.iOS.csprojファイルは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<Project
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
DefaultTargets="Build"
ToolsVersion="4.0" >
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.0</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{AE37B15F-F4BE-48DE-9F20-F00A601EC89E}</ProjectGuid>
<ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<AssemblyName>Core.iOS</AssemblyName>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="monotouch" />
</ItemGroup>
<Import Project=".\Core.csproj" />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
そして、私のCore.csprojファイルは次のようになります。私は、A、言ったように、
<?xml version="1.0" encoding="utf-8"?>
<Project
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
DefaultTargets="Build"
ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Core</RootNamespace>
</PropertyGroup>
<!-- Using AssemblyName's presence to check for whether this is imported. -->
<PropertyGroup Condition=" '$(AssemblyName)' == '' ">
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{FC495BD8-11B1-46B0-A9DE-F245A0CBEE94}</ProjectGuid>
<AssemblyName>Core</AssemblyName>
<SignManifests>false</SignManifests>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<!-- properties similar to Debug -->
</PropertyGroup>
<ItemGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<Import Condition=" '$(AssemblyName)' == 'Core' " Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<Compile Include="[...]" />
<Compile Include="[...]" />
</Project>
そして、 WinPhoneとXBox360プロジェクトにVS Expressを使用すると、これのバリエーションが正しく動作しているようです。これはうまくいくはずですか?これを行うより良い方法はありますか?
おかげで、
いいね、Monodevelopは内部的にxbuildを使用します。どのバージョンをインストールしましたか? – skolima
ありがとう。 MonoTouchプロジェクトがxbuildをバイパスしてmcsを直接呼び出すという印象を受けましたが、私はそれを誤読したり古い記事を見ているかもしれませんが、たとえそうであったとしても、どのターゲットが有効であるかを決定するためにIDEがxbuildをどれだけ使用するか知っています...私のMonoDevelopのバージョンは2.8.8.4です。もしあなたがレプロを必要とするなら、私が助けることができるものがあれば教えてください。 –