2017-04-17 9 views
3

.NET Framework 4.6.1フレームワークでASP.NET Coreアプリケーションを実行しています。私はそれに複数のプロジェクトを持つ1つのソリューションを持っています。すべてのプロジェクトは、.csprojでPackageReferencesを使用して相互に参照するクラスライブラリです(このようにして、独自にビルド、パッケージ化、バージョン化することができます)。しかし、NuGetを最初にプッシュする必要なく、相互の統合をテストできるようにしたいと思っています.-ソリューションとしてProjectReferencesとして使用したいのですが、JenkinsのビルドプロセスでPackageReferencesを使用してバージョンコンポーネントを別々にNuget矛盾するプロジェクトの参照とパッケージリファレンス

.NET Coreがproject.jsonベースの場合、これはうまくいきました。私はproject.jsonの最上位にバージョンを設定し、そのバージョンのプロジェクトがプロジェクトに存在していればそれをプロジェクトとして参照します。それ以外の場合は、NuGetフィードでそのバージョンを探します。

ProjectReferencesを使用する際の問題は、すべてのプロジェクトがビルドされ、NuGetに送信されるときに同じバージョンが取得されることです。

csprojでこれを行う方法はありますか?存在する場合はプロジェクト参照を探し、そうでなければNuGetを見ますか?上記

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <VersionPrefix>1.3.0</VersionPrefix> 
    <TargetFramework>net461</TargetFramework> 
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors> 
    <AssemblyName>MyProject1</AssemblyName> 
    <PackageId>MyProject1</PackageId> 
    <NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion> 
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> 
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> 
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> 
    </PropertyGroup> 

    <ItemGroup> 
    <PackageReference Include="MyProject2" Version="1.4.0-*" /> 
    <PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.1" /> 
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.1.1" /> 
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.1.1" /> 
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="1.1.1" /> 
    </ItemGroup> 

    <ItemGroup Condition=" '$(TargetFramework)' == 'net461' "> 
    <Reference Include="System" /> 
    <Reference Include="Microsoft.CSharp" /> 
    </ItemGroup> 

</Project> 

例ですが、私は1.4.0が溶液中に存在する場合MyProject2はProjectReferenceによって参照されたいです。

+0

あなたはまだ答えを見つけますか?私もこれに取り組んでいます。私は2つの別々のナゲットライブラリを持っています。独立してバージョンアップすることができますが、1つのリポジトリでそれらを管理し、ビルド/テストプロセスを行う、コアライブラリと検証ライブラリです。 –

答えて

1

私は最近、同じことをしようとしていて、答えを見つけることができませんでしたが、私のために働くものを見つけました。あなたはときにそこにプロジェクト参照を含めると、そのそこにあれば、パッケージの参照を除外するためにcsproj MSBuildのでExists条件を使用することができます。

<Project Sdk="Microsoft.NET.Sdk"> 
    ... 
    <ItemGroup> 
    <PackageReference Condition="!Exists('[path-to-project].csproj')" Include="[package-id]" Version="[pacakage-version].*" /> 
    </ItemGroup> 
    ... 
    <ItemGroup> 
    <ProjectReference Condition="Exists('[path-to-project].csproj')" Include="[path-to-project].csproj" /> 
    </ItemGroup> 
    ... 
</Project>