无法在天蓝色管道构建中进行多目标项目

问题描述 投票:0回答:1

我有一个针对 net472 和 netstandard2.0 的项目,它具有条件包引用和条件代码。

如果我在本地编译此代码,则不会出现任何错误,并且如果我通过 msbuild 编译解决方案。 但是,当我在 azure 构建管道中使用 msbuild 任务进行编译时,它会抛出如下错误:

##[错误]tests\LtCore.Tests\RiskUi\RiskUiProviderTests.cs(21,17):错误CS0246:找不到类型或命名空间名称“RiskUiProvider”(您是否缺少using指令或程序集引用? )

RiskUiProvider 类位于指令下

#if NET472  public class RiskUiProvider {} #endif
它属于多目标项目
<TargetFrameworks>net472;netstandard2.0</TargetFrameworks>
单元测试 net472 会抛出此错误,就好像他没有阅读该指令一样。

还有其他人遇到/解决过同样的问题吗?

我添加了多目标项目的参考,如下所示:

<ProjectReference Include="..\LTCore.Standard\LTCore.Standard.csproj">
    <AdditionalProperties>TargetFramework=net472</AdditionalProperties>
    <Name>LTCore.Standard</Name>
</ProjectReference>

但是就像在天蓝色的管道中他无法读取指令(

#if NET472
)并且奇怪的是在本地它一切正常并且正在运行

.net azure-devops multitargeting
1个回答
0
投票

从我这边测试,管道按预期工作。分享一下项目和yaml文件供大家参考。

  1. 我的
    MultiTargetingLibrary.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net472;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'net472'">
    <DefineConstants>NET472</DefineConstants>
  </PropertyGroup>

</Project>
  1. RiskUiProvider.cs
    在项目中
    MultiTargetingLibrary
#if NET472
public class RiskUiProvider
{
    ...
}
#endif

  1. 我的
    MultiTargetingLibrary.Tests.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="xunit" Version="2.5.3" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\MultiTargetingLibrary\MultiTargetingLibrary.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="Xunit" />
  </ItemGroup>

</Project>
  1. 我的构建管道的 YAML 文件
pool:
  vmImage: 'windows-latest'

variables:
  buildConfiguration: 'Release'
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'

steps:
- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '5.x' # Adjust based on your .NET SDK version

- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'
- task: MSBuild@1
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
© www.soinside.com 2019 - 2024. All rights reserved.