2017-04-17 103 views
3

我在.NET 4.6.1框架上運行ASP.NET Core應用程序。我有1個解決方案,其中包含多個項目。所有的項目都是類庫,它們通過.csproj中的PackageReferences引用對方(這樣我們就可以獨立地構建,打包和版本化)。但是,我希望能夠測試它們之間的集成,而無需首先將它們推送到NuGet - 也就是我想在解決方案中將它們用作ProjectReferences,但是在通過Jenkins構建過程構建它們時使用PackageReferences以便版本化組件分開。Nuget衝突的項目引用和packagereference

當.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

你找到答案了嗎?我也遇到了這個問題。我有兩個獨立的nuget庫。它的核心庫和驗證庫可以獨立進行版本管理,但可以在一個存儲庫和構建/測試過程中進行管理。 –

回答

1

我最近試圖做同樣的事情,找不到答案,但想出了一些適合我的東西。您可以使用Exists條件的MSBuild爲csproj包括該項目的參考,當它的存在,如果它的存在排除包參考:

<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>