我想同時在我的項目(A)和一個相關的Nuget包(B)中工作,而不需要在每次更改時都釋放nuget包。在Debug和Nuget中使用項目參考
在構建Debug時,是否可以從解決方案(A)中執行項目引用Nuget項目(B)。當構建版本使用Source的Nuget包時?
我想同時在我的項目(A)和一個相關的Nuget包(B)中工作,而不需要在每次更改時都釋放nuget包。在Debug和Nuget中使用項目參考
在構建Debug時,是否可以從解決方案(A)中執行項目引用Nuget項目(B)。當構建版本使用Source的Nuget包時?
一種方法是手動編輯csproj文件。 如果您當前所引用的NuGet包,你將不得不在像這樣的csproj文件的一部分:
....
<ItemGroup>
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
....
在這個例子中,使用log4net的。對於NuGet包,公鑰標記,版本等是不同的。 ,您可以在不改變:
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Reference Include="log4net">
<HintPath>Debug\log4net.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
在ItemGroup
元素的Condition
屬性正在做調試和發佈的工作。
是否有可能在構建Debug時從Solution(A)中執行項目引用Nuget項目(B)。當構建版本使用Source的Nuget包時?
當然,但有一些限制,你需要知道。
首先,所述NuGet包的ID應該從參考項目的名稱不同,否則,從的NuGet參考將替換項目參考(例如,TestProjectReferenceForDebug
是項目引用的名稱,如果您想同時使用項目參考和NuGet包,則不能使用此項目直接創建NuGet包,因此我創建了具有不同名稱的同一項目以創建NuGet包「TestNuGetForRelease
」):
二,你應該在ItemGroup
元素使用Condition
屬性,否則將出現「TestProjectReferenceForDebug
」之間不明確的引用和「TestNuGetForRelease
」,所以我們需要在ItemGroup
元素
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<Reference Include="TestNuGetForRelease, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
<HintPath>..\packages\TestNuGetForRelease.1.0.0\lib\net462\TestNuGetForRelease.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<ProjectReference Include="..\TestProjectReferenceForDebug\TestProjectReferenceForDebug.csproj">
<Project>{90424b17-2231-4d7d-997b-608115d9f4d9}</Project>
<Name>TestProjectReferenceForDebug</Name>
</ProjectReference>
</ItemGroup>
添加Condition
屬性三,經過我們與debug
和release
添加在ItemGroup
元素的Condition
屬性,我們可以在Debug
和中的NuGet Release
,H使用項目引用但是,如果我們在一個.cs文件中同時使用這些命名空間,則需要添加這兩個命名空間,那麼您將收到錯誤「找不到引用的組件'xxx'」。只有在「釋放」或「調試」模式,因爲VS找不到這兩個命名空間:
要解決此錯誤,我們有註釋的命名空間,其在其他配置模型你的時候將配置模型從Debug更改爲Release。
得好好的,唯一的問題是留下,如果我需要一個包的版本更新後編輯的csproj。 – medokin
在我們使用VS2012的環境中,它並不總是正確的。所以我們每次都仔細檢查它。 –