我在从 azure devops 中的项目创建 nuget 包时遇到问题,该项目是 .net 标准 2.0 目标netstandard2.0和netcoreapp2.0.
我有一个单独的构建和发布管道。
构建管道构建并测试项目。
发布管道获取构建的输出并dotnet pack在其上运行。然而,它试图同时进行构建(失败)。
我看到的文档表明,--no-build在调用 nuget pack 时添加应该使其使用 bin 目录中的现有 dll。
我已经查看了日志,这是 devops 一直在运行的命令(我已经删除了一些标识信息):
pack E:\Agents\build1\r82\a\...\MyProject.csproj --output E:\Agents\build1\r82\a\...\packages --no-build /p:Configuration=Release --verbosity Detailed
这会执行一次构建,然后失败并显示一条消息,指出无法找到某些引用的 nuget 包。
我可以只dotnet restore在那里放一个并让它进行构建,但我不明白为什么我们需要这样做,因为构建管道已经创建了 dll。
请注意,我已经看到了这一点,但在这种情况下,问题是构建输出到非标准目录,但这里不是这种情况。
任何帮助表示赞赏。
.net nuget azure-devops dotnet-cli azure-pipelines-release-pipeline
除了 .net core 2.2 项目之外,我的解决方案文件还包含一个网站项目。当我在 Visual Studio 中运行“重建解决方案”时,一切都会成功构建,包括网站。
在构建输出中,我看到:
>Validating Web Site
9>Building directory '/e2e/'.
9>Building directory '/node_modules/.bin/'.
... etc ...
Run Code Online (Sandbox Code Playgroud)
但如果我尝试从包含解决方案文件的文件夹运行“dotnet build”(v3.1.200),它会失败并出现以下错误:
Solution file error MSB4249: Unable to build website project "ClientApp". The ASP.NET compiler is only available on the .NET
Framework version of MSBuild
Run Code Online (Sandbox Code Playgroud)
如何从命令行构建我的解决方案?
[Visual Studio 是否运行“dotnet build”来构建解决方案”?如果是,使用什么参数?]
我想在源代码中手动定义软件的版本号。至少主要版本、次要版本和补丁版本组件(术语取自Semantic Versioning 2.0.0)。但是,对于构建元数据和.NET 的程序集修订版本组件,我希望它们能够被构建服务器自动覆盖。例如,在开发环境(开发人员桌面)中,构建元数据和程序集修订版本组件始终为空。0(例如 SemVer“1.2.3”,程序集“1.2.3.0”)。当开发人员签入代码更改时,构建服务器会使用格式yyMMdd(夜间构建)替换构建元数据和程序集修订版本组件。使用已经给出的示例,结果将类似于 SemVer“1.2.3+200721”和 Assembly“1.2.3.200721”。
我正在开发的软件是一个.NET Core 3.1 C#应用程序,使用 Visual Studio 2019 编写。因此,我将dotnetCLI 与单个解决方案文件结合使用,引用多个 C# 项目(一个主要项目和多个支持库)。对于最终的构建/发布(仅构建一个主要项目),我想使用如上所述的每晚自动发布的当前日期覆盖构建元数据和程序集修订版本组件。
构建服务器是GitHub Actions。这是我的工作流程脚本:
name: "Solution.sln (main)"
# Controls when the action will run. Triggers the workflow on push or
# pull request events but only for the master branch.
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]
# A workflow run is made up of one or more jobs that …Run Code Online (Sandbox Code Playgroud) 我想从 F# 脚本引用一些仅限 .NET Framework 的包,并使用以下命令运行它:
dotnet fsi script.fsx
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
warning NU1701: Package 'Hymans.ESF.Api 1.9.0' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' instead of the project target framework 'net5.0'. This package may not be fully compatible with your project.
Run Code Online (Sandbox Code Playgroud)
有没有办法与 .NET Framework 包一起使用dotnet fsi?
我有一个存储库,里面有很多解决方案。我想在 Azure DevOps 中设置构建管道并构建特定的解决方案。我只需要“恢复包、构建、运行单元测试、发布”等“标准”步骤。然而,“发布”这一步让我很头疼。
存储库的文件夹层次结构如下所示:
src
- Solution1
- Project1
- Project2
- Project3
- Solution2
- Project4
- Project5
...
Run Code Online (Sandbox Code Playgroud)
我的目标是仅发布解决方案 2 等项目 - 因此项目 4 和项目 5。将 的值设置workingDirectory为“src/Solution2”或“$(System.DefaultWorkingDirectory)/src/Solution2”无法按我的预期工作。
这是构建步骤的定义。
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
workingDirectory: src/Solution2
Run Code Online (Sandbox Code Playgroud)
在日志中,我看到
“C:\Program Files\dotnet\dotnet.exe”发布 [path_to_agent]_work\1\s\src\Solution1\Project1\Project1.csproj --configuration Release --output [path_to_agent]_work\1\a\Project1
以及存储库中每个项目的类似条目。
作为解决方法,我尝试使用“自定义”命令,但也没有成功。
- task: DotNetCoreCLI@2
displayName: 'Publish'
inputs:
command: custom
arguments: 'src/Solution2 --configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory) '
custom: publish
Run Code Online (Sandbox Code Playgroud)
这会生成一个日志条目,如下所示
“C:\Program Files\dotnet\dotnet.exe”发布 [path_to_agent]_work\1\s\src\Solution1\Project1\Project1.csproj src/Solution2 …
首先,一些背景信息:我有一个 Visual Studio 解决方案,其中包含几个生产类库和九个单元测试项目。所有项目都针对 .NET 5。我正在运行 .NET 5.0.401。所有单元测试项目都引用了coverlet.collector. 我不使用旧的coverlet.msbuild软件包。根据我的阅读,使用XPlat Code Coverage现在是 .NET Core 的惯用法。
我有一个用于 CI 构建的 Azure Pipelines 管道。作为此管道的一部分,我想运行所有单元测试,生成单元测试结果以上传到管道,并生成代码覆盖率结果以上传到管道。我已经阅读了几篇博客文章和文档,这些文章和文档似乎使这一切变得简单;然而,我发现事实并非如此。
让我们从在本地工作站上运行一些命令开始简单。出于本练习的目的,我们假设我已经使用以下命令成功构建了解决方案:
dotnet build Solution.sln --configuration Debug
Run Code Online (Sandbox Code Playgroud)
如果我运行这样的测试:
dotnet test Solution.sln --configuration Debug --no-build --no-restore --collect:"XPlat Code Coverage" --results-directory artifacts/test-results
Run Code Online (Sandbox Code Playgroud)
然后我看到代码覆盖率结果存储在以 GUID 命名的子目录中。我不知道微软为什么决定这样做,但这不是我所能控制的。
(运行此命令并截图后,我删除了该test-results目录。)
请记住,我还想生成单元测试结果。为此,我将--logger trx参数添加到同一命令行中。这次,创建了许多其他文件夹,其中包含看似重复的代码覆盖率结果。此外,我还得到了.trx我正在寻找的文件。
您会注意到,除了.trx我想要的九个文件之外,还有另外九个代码覆盖率报告。
我的自托管 Pipelines 构建代理上会生成类似的重复文件。在管道中,如果我尝试执行以下任务:
dotnet build Solution.sln --configuration Debug
Run Code Online (Sandbox Code Playgroud)
我收到错误:
##[warning]Multiple file or directory matches were found. Using the …Run Code Online (Sandbox Code Playgroud) dotnet test默认使用 trx 输出。我正在使用trx2junit将其转换为 junit,但这会使 CI 设置变得复杂。
是否可以直接从 dotnet test 输出 junit 格式的测试报告?
我的项目有超过 400 个依赖项,我必须使用 .NET 7.0 中的命令立即更新所有依赖项。
我尝试过 nukeeper、dotnet-outdated-tool 和 NuPu。nukeeper 和 dotnet-outdated 已被弃用,Nupu 用于同时更新依赖项(一一更新)。有太多的依赖项,所以我不期待 GUI,而只期待命令。
我正在使用VS 2017与.NET标准类库中的新csproj,尝试使用带有dotnet test命令的MSTest测试框架,使用.NET Core 1.1测试项目来测试库.在当地跑步完美无缺; 当我将构建发送到持续集成时,我收到错误:
No test discoverer is registered to perform discovery of test cases.
如何在VSTS中注册此发现者并运行我的测试?
运行时dotnet test,是否可以显示在控制台中运行的所有测试的列表,而不是某些输出文件?
在控制台中看到这样的列表将是理想的:
x test1
test2
test3
x test4
Run Code Online (Sandbox Code Playgroud)
而不只是整体测试统计信息(运行,失败,跳过)。
dotnet-cli ×10
.net-core ×3
azure-devops ×3
.net ×2
c# ×2
nuget ×2
.net-5 ×1
.net-7.0 ×1
azure-pipelines-release-pipeline ×1
dotnet-test ×1
f# ×1
msbuild ×1
mstest ×1
versioning ×1
vstest ×1
xunit.net ×1