Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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
C# 如何使用.Net核心对程序集进行“外部别名”?_C#_.net_Asp.net Core_.net Core - Fatal编程技术网

C# 如何使用.Net核心对程序集进行“外部别名”?

C# 如何使用.Net核心对程序集进行“外部别名”?,c#,.net,asp.net-core,.net-core,C#,.net,Asp.net Core,.net Core,TLDR:几乎所有内容都在标题中 假设您的project.json使用了两个包,这两个包有两个名称相同的类型(相同的名称,相同的命名空间) 如何使用这些类型中的一种 使用.Net分类,这很容易。只要用一个铅笔 但是如何使用.net core做到这一点? 我在package.json中没有看到任何选项可以像在程序集引用属性窗口中那样定义别名 关于这个问题,我唯一能找到的是 [编辑]似乎有一个悬而未决的问题目前对此没有支持。请随时在dotnet cli repo中提交问题,您可以通过以下方式完成:

TLDR:几乎所有内容都在标题中

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

如何使用这些类型中的一种

使用.Net分类,这很容易。只要用一个铅笔

但是如何使用.net core做到这一点? 我在
package.json
中没有看到任何选项可以像在程序集引用属性窗口中那样定义别名

关于这个问题,我唯一能找到的是


[编辑]似乎有一个悬而未决的问题

目前对此没有支持。请随时在dotnet cli repo中提交问题,您可以通过以下方式完成:

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

您可以在此处找到示例:

我相信您试图链接到的问题在此处:


您可以通过使用MSBuild目标来解决此问题。将此代码段放入
目录.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>


我在.Net Core 2.2中遇到了一个问题,
MySqlConnector
类型名称和命名空间发生冲突,答案是创建一个别名。我认为这也能满足您的需要,只需相应地更改下面的
MySqlConnector

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

<ItemGroup>
    <PackageReference Include="StackExchange.Redis.StrongName" Version="1.2.6" Alias="signed" />
</ItemGroup>
MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection

虽然此代码可能会回答此问题,但提供有关此代码回答此问题的原因和/或方式的其他上下文可提高其长期价值。这缺少有关如何在csprojyep中设置别名的信息,这就是问题所在。我编辑了我的问题。我没有测试您的解决方案,但它看起来很有效,我接受:)是“Directory.Build.targets”吗?是吗“Directory.Build.targets”,在哪个文件中?
Directory.Build.targets
是您在解决方案目录中创建的MSBuild文件。如果它存在,它将被加载到您的构建中。如果您只在一个项目中需要它,您可以将它添加到您的
csproj
,但如果您有多个项目,将它添加到该文件将允许它从解决方案中的任何项目中使用。@davethieben我收到以下错误,无法解决。是否可以帮助错误CS0430:在/reference选项中未指定外部别名“signed”
extern alias MySqlConnectorAlias;
MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection