如何`extern别名`与.Net核心的程序集?

时间:2016-03-09 18:26:33

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

TLDR :一切都在标题中。

假设您的project.json使用两个包含两个类型的包(名称相同,命名空间相同)。

如何使用其中一种类型?

通过对.Net进行分类,这很简单。只需使用extern alias

但是你是如何使用.net核心的呢? 我在package.json中没有看到任何可以让我定义别名的选项,就像我在程序集引用属性窗口中所做的那样。

我设法找到的唯一提到的问题是here

[edit] 似乎有一个未解决的问题here

4 个答案:

答案 0 :(得分:4)

我相信您要链接的问题在这里:
https://github.com/NuGet/Home/issues/4989

您可以通过使用MSBuild目标来解决。将此代码段放入Directory.Build.targets

<Target Name="AddPackageAliases" BeforeTargets="ResolveReferences" Outputs="%(PackageReference.Identity)">
    <PropertyGroup>
        <AliasPackageReference>@(PackageReference->'%(Identity)')</AliasPackageReference>
        <AliasName>@(PackageReference->'%(Alias)')</AliasName>
    </PropertyGroup>

    <ItemGroup>
        <ReferencePath Condition="'%(FileName)'=='$(AliasPackageReference)'">
            <Aliases>$(AliasName)</Aliases>
        </ReferencePath>
    </ItemGroup>
</Target>

,然后在PackageReference节点的csproj中使用它,如下所示:

<ItemGroup>
    <PackageReference Include="StackExchange.Redis.StrongName" Version="1.2.6" Alias="signed" />
</ItemGroup>

将此添加为对GitHub问题的评论:
https://github.com/NuGet/Home/issues/4989#issuecomment-426666530

答案 1 :(得分:1)

目前暂不支持。随意在dotnet cli repo https://github.com/dotnet/cli/issues

中提交问题

答案 2 :(得分:0)

.Net Core 2.2中存在一个问题,其中MySqlConnector类型名称和名称空间发生冲突,答案是创建别名。我认为这也应满足您的需求,只需在下面相应地更改MySqlConnectorhttps://stackoverflow.com/a/48686823/479701

<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
    <ItemGroup>
      <ReferencePath Condition="'%(FileName)' == 'MySqlConnector'">
        <Aliases>MySqlConnectorAlias</Aliases>
      </ReferencePath>
    </ItemGroup>
  </Target>

然后在使用前在您的cs文件中:

extern alias MySqlConnectorAlias;

然后像这样引用您的类型:

MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection

答案 3 :(得分:-1)

您可以通过以下方式做到这一点:

extern alias Lib1;
extern alias Lib2;
using System;
using SpaceOne=Lib1::Space;
using SpaceTwo=Lib2::Space;

您可以在此处找到示例:https://github.com/ernado-x/owl/blob/master/src/Owl/Program.cs