![](/img/trans.png)
[英]PackageReference or ProjectReference to a component inside the same solution?
[英]Nuget Conflicting projectreference and packagereference
我正在.NET 4.6.1框架上運行ASP.NET Core應用程序。 我有一個包含多個項目的解決方案。 所有項目都是通過其.csproj中的PackageReferences相互引用的類庫(這樣我們就可以獨立地構建,打包和版本化它們)。 但是,我希望能夠在不需要首先將它們推送到NuGet的情況下測試它們之間的集成 - 我想在解決方案中使用它們作為ProjectReferences,但是在通過我的Jenkins構建過程構建它們時使用PackageReferences以便版本這些組件分開。
當.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,我希望ProjectReference引用MyProject2。
我最近嘗試做同樣的事情,找不到答案,但想出了一些對我有用的東西。 您可以使用MSBuild中的Exists
條件為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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.