Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Msbuild Visual Studio社区2017中的条件引用_Msbuild_Nuget Package_Visual Studio Mac_Multitargeting_Msbuild Projectreference - Fatal编程技术网

Msbuild Visual Studio社区2017中的条件引用

Msbuild Visual Studio社区2017中的条件引用,msbuild,nuget-package,visual-studio-mac,multitargeting,msbuild-projectreference,Msbuild,Nuget Package,Visual Studio Mac,Multitargeting,Msbuild Projectreference,我正在创建一个多平台应用程序。我有一个多目标共享库(目标为.netstandard 2.0和.net 4.5)…请参阅项目文件: <PropertyGroup> <TargetFrameworks>netstandard2.0;net45</TargetFrameworks> </PropertyGroup> netstandard2.0;网络45 当我在windows上的visual studio 2017中构建项目时,我在

我正在创建一个多平台应用程序。我有一个多目标共享库(目标为.netstandard 2.0和.net 4.5)…请参阅项目文件:

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

netstandard2.0;网络45
当我在windows上的visual studio 2017中构建项目时,我在输出中得到两个目录(netstandard2.0、net45)和相应的DLL。建造是成功的

当我在mac上的visual studio 2017中构建完全相同的项目(相同的代码)时,我会遇到以下性质的错误:

“OptionAttribute”类型存在于“CommandLine.DotNetStandard,Version=1.0.30”和“CommandLine,Version=1.9.71.2”中

我以以下方式有条件地引用了命令行解析器库:

  <!-- CommandLineParser library -->
  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <PackageReference Include="CommandLine.DotNetStandard">
      <Version>1.0.3</Version>
    </PackageReference>
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net45'">
    <PackageReference Include="CommandLineParser">
      <Version>1.9.71</Version>
    </PackageReference>
  </ItemGroup>

1.0.3
1.9.71

这对windows非常有效,但在mac上它似乎没有观察到这种情况。这是mac上visual studio的已知错误吗?我做错什么了吗?

在这些情况下,Visual Studio会忽略该条件。使用应完全支持的
选项/When


1.0.3
1.9.71

如果MsBuild只考虑第一个
或条件,则您需要执行以下操作:

 <Choose>
    <When Condition="'$(Configuration)'=='Debug'">
      <ItemGroup>
        <ProjectReference Include="..\path\to_your_project.csproj" />
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <PackageReference Include="Package-Name" Version="1.0.0"/>
      </ItemGroup>
    </Otherwise>
  </Choose>


是的,但太糟糕了,msbuild只是默默地忽略条件,从而掩盖了真正的问题。这并没有解决我的问题,因为它一直忽略秒目标的条件。的可能重复
 <Choose>
    <When Condition="'$(Configuration)'=='Debug'">
      <ItemGroup>
        <ProjectReference Include="..\path\to_your_project.csproj" />
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <PackageReference Include="Package-Name" Version="1.0.0"/>
      </ItemGroup>
    </Otherwise>
  </Choose>