TLDR :一切都在标题中。
假设您的project.json
使用两个包含两个类型的包(名称相同,命名空间相同)。
如何使用其中一种类型?
通过对.Net进行分类,这很简单。只需使用extern alias。
但是你是如何使用.net核心的呢?
我在package.json
中没有看到任何可以让我定义别名的选项,就像我在程序集引用属性窗口中所做的那样。
我设法找到的唯一提到的问题是here
[edit] 似乎有一个未解决的问题here
答案 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
类型名称和名称空间发生冲突,答案是创建别名。我认为这也应满足您的需求,只需在下面相应地更改MySqlConnector
:https://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