我有一个针对 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
)并且奇怪的是在本地它一切正常并且正在运行
从我这边测试,管道按预期工作。分享一下项目和yaml文件供大家参考。
MultiTargetingLibrary.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net472;netstandard2.0</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net472'">
<DefineConstants>NET472</DefineConstants>
</PropertyGroup>
</Project>
RiskUiProvider.cs
在项目中MultiTargetingLibrary
#if NET472
public class RiskUiProvider
{
...
}
#endif
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>
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)'