Mam kolekcję plików csproj, które wszystkie odnoszą się do tego samego zestawu plików źródłowych, ale mają nieco inne dane docelowe, dzięki czemu muszę zachować oddzielne pliki projektu. Na przykład. istnieją wersje WinPhone, XBox, Desktop, MonoTouch tego samego projektu.Pliki projektu Mulitalking C# z Mono i MonoDevelop
Rzeczy naprawdę powielone, takie jak lista plików .cs do kompilacji, chcę skonsolidować listę w jeden plik, więc nie muszę się upewnić, że wszystkie odmiany są zsynchronizowane . Początkowo próbowałem to zrobić, usuwając źródła z .csprojs i umieszczając je w pliku .targets, który został zaimportowany przez wszystkie csprojs, ale to spowodowało, że pliki źródłowe zniknęły z VS i MonoDevelop.
Moja druga próba polegała na tym, że główny plik csproj na pulpicie został zainstalowany, a wszystkie warianty zaimportowały csproj z pewną logiką warunkową. Dzięki temu pliki źródłowe są edytowalne z głównego csproj i są wbudowane we wszystkie smaki. Teraz Visual Studio rozumie, co próbowałem zrobić, ale MonoDevelop nie może go zbudować. W rozwiązaniu MonoDevelop wersja rdzennej biblioteki DLL dla systemu iOS jest wyszarzona i mówi "(nie jest wbudowana w aktywną konfigurację)"
Próbowałem także xbuilding csproj i rozwiązania, które wydaje się ominąć problemy, które MonoDevelop ma ale czkawka dotycząca innych rzeczy związanych z rozwiązywaniem zespołów monotouch. Myślałem, że MonoDevelop używał xbuilda, ale może nie?
Ponieważ działa to w msbuild systemu Windows, wygląda na to, że jest to albo błąd, albo funkcja nieobsługiwana w Mono. A może jest lepszy sposób, aby poradzić sobie z całym scenariuszem ... Myślałem, że zapytam tutaj.
Do specyfiki, Mój plik Core.iOS.csproj wygląda następująco:
<?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>
A mój plik Core.csproj wygląda następująco:
<?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>
I jak ja powiedziałem, Wariacja ta wydaje się działać poprawnie podczas korzystania z VS Express dla projektów WinPhone i XBox360. Czy to coś powinno działać? Czy jest lepszy sposób to zrobić?
Dzięki,
Wygląda dobrze, a Monodevelop wewnętrznie używa xbuild. Jaką wersję zainstalowałeś? – skolima
Dzięki za spojrzenie. Kiedy szukałem tego, by odpowiedzieć na to pytanie osobiście, odniosłem wrażenie, że projekty MonoTouch ominęły xbuild i bezpośrednio wywołały mcs, ale mogłem błędnie je odczytać lub zaglądać do starego artykułu, ale nawet jeśli tak było, nie robię tego. t wie, ile IDE wykorzysta xbuild do określenia, które cele są ważne ... Moja wersja MonoDevelop to 2.8.8.4. Daj mi znać, jeśli jest coś, w czym mogę pomóc, jeśli potrzebujesz repro. –