C# 如何使用.Net核心对程序集进行“外部别名”?
TLDR:几乎所有内容都在标题中 假设您的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中提交问题,您可以通过以下方式完成:
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