rob*_*es3 8 c# .net-core asp.net-core
我一定要疯了。我遇到了一个问题,即 adotnet publish正在输出某些软件包的旧版本(特别是Microsoft.Extensions.Configuration.dll),这导致了运行时问题。我的(简化).csproj 如下...
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<VersionPrefix>1.0.0</VersionPrefix>
<TargetFrameworks>net462</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="BundlerMinifier.Core" Version="2.3.327" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.1" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
当我dotnet publish在我的开发机器上运行 a时,它输出Microsoft.Extensions.Configuration.dll(1.1.2.30427)的正确版本。但是,我的 TeamCity 构建服务器输出了它的超旧版本 (1.0.0.20622)。我尝试了几件事,包括:
dotnet nuget locals -c all 清除构建服务器上的本地缓存<RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>看看这是否有帮助dotnet --info 在我的本地开发和 TeamCity 服务器上返回完全相同的版本我引用了一些依赖于Microsoft.Extensions.Configuration1.1.0 的库,但据我所知,这只是最低要求。我明确告诉主应用程序使用 1.1.2。
我错过了什么?为什么它不输出我明确告诉它要拉的包?
我最近也遇到了这个问题,绕了好几个小时。无论我做什么,我都发现dotnet publish MySolution.sln --configuration Release --output dist不断将 v2.0 输出Microsoft.Extensions.FileSystemGlobbing.dll到该dist文件夹,即使整个解决方案中唯一的项目完全依赖它(通过引用Microsoft.Extensions.Configuation.Json肯定是使用 .NET 中的 v3.1.0) 3.1 SDK(以及更高版本的 v3.1.2 作为直接 NuGet 添加)
VS 2019 构建将成功,并将 v3.1 DLL 放入输出文件夹中。正如您所发现的,dotnet publish不带该--output标志的调用会将正确的 v3.1 DLL 放入bin\release\publish文件夹中...
就在那时,一分钱都掉了下来。--ouput X将所有已发布的文件整理到其中X,随后输出与现有文件同名的文件,将覆盖先前输出的文件。我做了一个Windows文件搜索*globbing.dll,发现当我不使用时,--output不同的子文件夹中有两个版本的DLL:
MySolution\MyProject1\bin\release\publish\Microsoft.Extensions.FileSystemGlobbing.dll <-- v3.1 as expected
MySolution\MyProject1.UnitTests\bin\release\publish\Microsoft.Extensions.FileSystemGlobbing.dll <-- v2.0 !
Run Code Online (Sandbox Code Playgroud)
由于某种原因,最近添加的 UnitTests 项目正在输出 DLL 的 v2.0。它没有被引用为解决方案资源管理器中的依赖项,所以我不确定为什么,但因为它是稍后构建的,所以--output正在收集稍后构建但较早版本的文件并覆盖较早构建但较晚的文件版本化文件..
现在我需要找出为什么单元测试输出这个旧版本,但是有一个解释为什么让--output你留下一个旧版本;可能是编写了新版本,但随后作为该--output过程的一部分被旧版本覆盖
对于那些以后看这里的人......
在浪费了数小时的生命之后,使用--output带有dotnet publish.
这就是我使用的导致旧库写出的内容:
dotnet publish Foo.sln --framework net462 --configuration Release --output C:\test\dist
Run Code Online (Sandbox Code Playgroud)
这(取出--output)工作得很好并输出正确的库:
dotnet publish Foo.sln --framework net462 --configuration Release
Run Code Online (Sandbox Code Playgroud)
更奇怪的是,我的本地开发机器在任何一种情况下都可以正常工作(有或没有--output)。我花了太多时间与工具进行斗争以找出实际问题所在,因此如果有人确实让我知道以备将来参考。
| 归档时间: |
|
| 查看次数: |
1391 次 |
| 最近记录: |