背景:
我创建了一个针对net40、net462和netstandard2.0的多目标库。这个库的目的是包装StackExchange.Redis和一些相关的重新连接逻辑。对于net40,我需要使用比新目标更早的包版本。这是我的csproj文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net40;net462;netstandard2.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="StackExchange.Redis">
<Version>2.0.513</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
<PackageReference Include="StackExchange.Redis">
<Version>2.0.513</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net40'">
<PackageReference Include="StackExchange.Redis.StrongName">
<Version>1.1.608</Version>
</PackageReference>
</ItemGroup>
</Project>一般来说,这个库似乎可以工作,并且可以被不同目标框架上的应用程序使用。
问题:
我现在遇到的问题是如何恢复这个项目的nuget包。
- I get several instances of this error coming from projects that indirectly reference my multi-targeting project:构建恢复了NuGet包。再次构建项目,以将这些包包含在生成中。有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=317568._
-我还从直接或间接引用我的多目标库的各种项目中获得了更多的错误实例。{Identifier}和{Namespace}各有不同,有些是指我的多目标库中的实体,有些是指依赖于此的项目中的实体。
CS0234名称空间{ namespace }中不存在类型或名称空间名称“{标识符}”(您是否缺少程序集引用?)
-如果我第二次构建,正如第一个错误所暗示的,我会得到同样的错误。
dotnet restore,那么构建将正常工作。此项目是解决方案中唯一使用多目标和csproj <PackageReference>包参考格式的项目。
我需要还原包,以便集成到我的构建中,以便
失败的尝试:
以下是我迄今尝试过的几件事:
dotnet restore作为项目预构建事件。这没什么用。dotnet restore作为解决方案构建前事件运行。这在本地是可行的,但是这个扩展通常是不可靠的,而且也无助于第三方构建,比如TeamCity。packages.config文件更新csproj文件以使用旧的包引用格式。这就引入了许多新的构建错误。更新
-restore开关似乎不会改变这一点。由于那里的产量,我可能忽略了一些东西。dotnet restore时,它仍然失败。我试过马丁·乌尔里希的解决方案。如果不更新我的csproj文件中的引用并删除package.config文件,这似乎是行不通的。为此,我使用了Visual从旧格式到PackageReference格式的内置转换。
这稍微改变了我的错误。我发布的例子回购可能还不够复杂。我现在得到了很多
找不到{项目文件夹}\packages.config。确保此项目已安装Microsoft.Bcl.Build,并且packages.config位于项目文件旁边。
几个
此项目引用此计算机上缺少的NuGet包。使用NuGet包还原来下载它们。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是{ project}\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets.的路径
还有一些CS0246错误,就像我以前遇到的那样。
CS0234错误现在消失了。
发布于 2019-07-09 12:23:38
您正在从一个经典的csproj文件中引用一个基于PackageReference的项目。
默认情况下,这意味着您需要手动将nuget包安装到经典项目,因为它没有使用PackageReference的传递行为。
要解决此问题,可以将以下内容添加到经典csproj文件的<PropertyGroup>中:
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>https://stackoverflow.com/questions/56938270
复制相似问题