【问题标题】:.NET Core 2.0 Project Builds But Not When Referenced By Another .NET Core 2.0 Project.NET Core 2.0 项目生成,但在被另一个 .NET Core 2.0 项目引用时不生成
【发布时间】:2017-09-07 21:01:16
【问题描述】:

我在 Ubuntu 上,我有两个 .NET Core 2.0 项目(项目 Oranges.csprojApples.csproj)。 Oranges 仅包含对 NuGet 包的引用,而 Apples 包含对 Oranges 的引用。

运行dotnet build -f netcoreapp2.0 Oranges.csproj 成功! Oranges.dll 现在存在于 /Oranges/bin/Debug/netcoreapp2.0/Oranges.dll

运行 dotnet build -f netcoreapp2.0 Apples.csproj 失败:error CS0009: Metadata file '/Oranges/bin/Debug/netcoreapp2.0/Oranges.dll' could not be opened -- PE image doesn't contain managed metadata

如何在Apples 中毫无问题地引用Oranges,它可以毫无问题地构建?

Oranges.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <TargetFrameworks>netcoreapp2.0;net451;</TargetFrameworks>
    <RootNamespace>Oranges</RootNamespace>
    <SignAssembly>true</SignAssembly>
    <AssemblyOriginatorKeyFile>..\..\GeneratedKey.snk</AssemblyOriginatorKeyFile>
    <DelaySign>false</DelaySign>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'netcore2.0'">
    <DefineConstants>NETCORE2_0</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="'$(TargetFramework)' == 'net451'">
    <DefineConstants>NET4_5_1</DefineConstants>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="packages.config" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="System.Collections.Immutable" Version="1.4.0" />
  </ItemGroup>
</Project>

Apples.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <TargetFrameworks>netcoreapp2.0;net451;</TargetFrameworks>
    <RootNamespace>Apples</RootNamespace>
    <SignAssembly>true</SignAssembly>
    <DelaySign>false</DelaySign>
    <AssemblyOriginatorKeyFile>..\..\GeneratedKey.snk</AssemblyOriginatorKeyFile>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="packages.config" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="CommandLineParser" Version="2.1.1-beta" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="System.Collections.Immutable" Version="1.4.0" />
    <PackageReference Include="System.Composition" Version="1.1.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Oranges\Oranges.csproj" />
  </ItemGroup>
</Project>

【问题讨论】:

  • 你能给我们提供苹果和橙子的 csprojs 吗?顺便说一句,不错的项目名称。
  • @Thomas 当然可以!
  • 使用 CLI 添加引用。 MSDN 文档here
  • @PratikGaikwad 感谢您的评论。我已经添加了对该项目的引用。请参阅上面Apples.csproj 的代码。
  • 这个构建是否在 windows 上使用 msbuild(/mono 5.2 msbuild 在 linux 上)?完整的程序集签名尚未在 .net 核心 AFAIK 上工作

标签: c# asp.net linux asp.net-core msbuild


【解决方案1】:

从项目目录中删除binobj 文件夹并重建后,显示不同的错误。

CSC : error CS7027: Error signing output with public key from file 'GeneratedKey.snk' -- Assembly signing not supported. [.../Oranges/Oranges.csproj]

经过一番研究,我偶然发现了一个解决方案。

Assembly Signing Not Supported

将下面的行添加到需要签名的每个程序集的 .csproj 文件中解决了该问题。

&lt;PublicSign Condition=" '$(OS)' != 'Windows_NT' "&gt;true&lt;/PublicSign&gt;

目前看来,如果您需要对 netcore 程序集进行签名,应该在 Windows 上完成。

【讨论】:

  • 有道理。签名是您的样本中唯一“奇怪”的事情。这是过去的特征。
猜你喜欢
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2018-10-12
  • 2018-08-14
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多