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

Oli*_*ier 14 .net c# .net-core asp.net-core

TLDR:一切都在标题中.

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

如何使用其中一种类型?

通过对.Net进行分类,这很容易.只需使用extern别名.

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

我设法找到这个问题的唯一提到就是这里

[编辑] 这里似乎有一个未解决的问题

And*_*atz 7

我在 .Net Core 2.2 中遇到问题,其中MySqlConnector类型名称和命名空间发生冲突,答案是创建别名。我认为这也应该适合您的需求,只需MySqlConnector相应更改以下内容即可:/sf/answers/3408077641/

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

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

extern alias MySqlConnectorAlias;
Run Code Online (Sandbox Code Playgroud)

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

MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection
Run Code Online (Sandbox Code Playgroud)


dav*_*ben 6

我相信您要链接到的问题在这里: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>
Run Code Online (Sandbox Code Playgroud)

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

<ItemGroup>
    <PackageReference Include="StackExchange.Redis.StrongName" Version="1.2.6" Alias="signed" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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


Lia*_*iam 6

不再需要所有这些解决方法。您现在可以alias在 v16.7+ 的 dotnet 中使用。详细信息请参见此处

因此,不再需要这里的任何解决方法。只需将别名添加到您的项目文件中(智能感知似乎不认为它存在,但它有效):

<ProjectReference Include="Example.csproj" Aliases="ExampleAlias" />
Run Code Online (Sandbox Code Playgroud)

extern alias ExampleAlias;然后像使用 .Net 框架一样使用代码:

extern alias ExampleAlias;

using ExampleAlias::Namespace;
Run Code Online (Sandbox Code Playgroud)

一切正常。此处的文档