med*_*kin 12 .net c# visual-studio nuget
我想同时在我的项目(A)和一个从属Nuget包(B)中工作,而不需要在每次更改时释放nuget包.
在构建Debug时,是否可以从解决方案(A)中执行项目引用Nuget项目(B).构建Release时使用Source中的Nuget包?
小智 8
一种方法是手动编辑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>
....
Run Code Online (Sandbox Code Playgroud)
在此示例中,使用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>
Run Code Online (Sandbox Code Playgroud)
元素中的Condition
属性ItemGroup
是在调试和发布之间完成的.
\n\n\n构建 Debug 时是否可以从解决方案 (A) 中进行项目引用 Nuget 项目 (B)。在构建 Release 时使用 Source 中的 Nuget 包吗?
\n
当然可以,但您需要了解一些限制。
\n\n首先,NuGet包的ID应该与引用项目的名称不同,否则,来自NuGet的引用将替换项目引用。(例如,TestProjectReferenceForDebug
是项目引用的名称,如果你想使用项目引用和同时创建NuGet包,不能直接用这个项目来创建NuGet包,所以我创建了一个不同名称的同一个项目来创建NuGet包“” TestNuGetForRelease
)\xef\xbc\x9a
其次,你应该在元素Condition
中使用属性,否则,\' \'和\' \'ItemGroup
之间存在不明确的引用,所以我们需要在元素中添加属性TestProjectReferenceForDebug
TestNuGetForRelease
Condition
ItemGroup
<ItemGroup Condition=" \'$(Configuration)|$(Platform)\' == \'Release|AnyCPU\'">\n <Reference Include="TestNuGetForRelease, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >\n <HintPath>..\\packages\\TestNuGetForRelease.1.0.0\\lib\\net462\\TestNuGetForRelease.dll</HintPath>\n <Private>True</Private>\n </Reference>\n </ItemGroup>\n <ItemGroup Condition=" \'$(Configuration)|$(Platform)\' == \'Debug|AnyCPU\'">\n <ProjectReference Include="..\\TestProjectReferenceForDebug\\TestProjectReferenceForDebug.csproj">\n <Project>{90424b17-2231-4d7d-997b-608115d9f4d9}</Project>\n <Name>TestProjectReferenceForDebug</Name>\n </ProjectReference>\n </ItemGroup>\n
Run Code Online (Sandbox Code Playgroud)\n\n第三,当我们在元素Condition
中添加和属性后,我们可以在和 Nuget中使用项目引用,但是,如果我们同时在一个 .cs 文件中使用这些命名空间,我们需要添加这两个命名空间,那么您将收到错误“找不到引用的组件\'xxx\'”。这是因为 VS 仅在“Release”或“Debug”模型中找不到这两个命名空间:ItemGroup
debug
release
Debug
Release
要解决此错误,当您将配置模型从“调试”更改为“发布”时,我们必须在另一个配置模型中注释命名空间。
\n\n\n 归档时间: |
|
查看次数: |
1507 次 |
最近记录: |