c# - Azure Pipeline (DotNetCoreCLI@2) 将 DLL 包含到 nuget 中

标签 c# azure azure-devops azure-pipelines nuget-package

正在将代码库/管道升级到 Dotnet Core。 项目的 oldcode.dll 文件中有一些需要包含的 C++ 代码。

我们旧的“pack”管道看起来像:

- task: NuGetCommand@2
  inputs:
    command: 'pack'
    packagesToPack: '**/ProjectName.csproj'
    buildProperties: '-IncludeReferencedProjects'

生成了具有以下文件夹结构的 nuget:

>build
--->oldcode.dll
--->project.targets

>lib
--->net472
------>project.dll
------>project.pdb
------>project.xml

将项目升级到 Dotnetcore 并使用此管道不会将 oldcode.dll 包含到 nuget

- task: DotNetCoreCLI@2
  inputs:
    command: 'pack'
    packagesToPack: '**/ProjectName.csproj'

我已阅读有关 DotNetCore 中缺少的 IncludeReferencedProjects 函数的信息 https://github.com/NuGet/Home/issues/3891

对于这种情况,最简单的解决方法是什么? 我可以在push之前以某种方式将oldcode.dll复制到nuget中吗?

更新---- 我已经尝试过:

  • 将 .nuspec 直接设置到packagesToPack 中不起作用。

并给出错误:

task: DotNetCoreCLI@2
inputs:
command: 'custom'
custom: 'pack **/NameOfFile.nuspec'


##[error]Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1

是我走错了路吗?

如果我能弄清楚如何正确完成路径,这可能就是我需要做的 https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-using-a-nuspec

dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

最佳答案

即使您通常不需要,您仍然可以将 .nuspec 包与 dotnet core 一起使用。

因此,手动创建一个文件,包含 <file> 元素和调用包,而不是项目:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
    <!-- Required elements-->
    <id></id>
    <version></version>
    <description></description>
    <authors></authors>

    <!-- Optional elements -->
    <!-- ... -->
    </metadata>
    <!-- Optional 'files' node -->
    <files>
        <file src="oldcode.dll" target="lib" />
    </files>
</package>

您也许可以将 .nuspec. 文件替换为 csproj 参数中的 packagesToPack 文件,但如果不能,您可以使用自定义参数。

- task: DotNetCoreCLI@2
  inputs:
    command: 'custom'
    custom: 'pack path/to/Myproject.nuspec'

路径应该相对于存储库根目录,因此

Root
|
|__MySolutionFolder
   |
   |__MyProject
      |
      |__ProjectName.csproj
      |__ProjectName.nuspec

应该是 ./MySolutionFolder/MyProject/ProjectName.nuspec 的相对路径

使用正斜杠的 IIRC 始终是安全的,但反斜杠仅适用于 Windows 代理

关于c# - Azure Pipeline (DotNetCoreCLI@2) 将 DLL 包含到 nuget 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69461764/

相关文章:

c# - C# 中的对象转换

c# - 从 Click Once 应用程序获取源代码

c# - List<T> 动态拼接

java - 使用 BlobDownload 客户端的不同校验和值

azure - Azure Devops Pipeline 中的变量组 yaml 变量表达式

git - 将一个 git 存储库复制到另一个具有历史记录的存储库

c# - Azure Devops - 通过代理池 ID 获取发布定义

c# - 对自定义 Web API AuthorizeAttribute 进行单元测试

java - 如何使用 Java 将错误消息移动到 Azure 死信队列?

c# - 在 Azure Pipeline 和 Linux 上构建 .Net Framework