Reputation: 5688
TLDR: Everything is pretty much in the title.
Suppose that your project.json
uses two packages that have a two types which are named the same (same name, same namespace).
How to use one of thoses types ?
With classing .Net, that's easy. Just use an extern alias.
But how do you do that using .net core ?
I dont see any option in package.json
that would let me define an alias like I would do in an assembly reference property window.
The only mention of this issue i managed to find is here
[edit] It seems that there is an open issue here
Upvotes: 25
Views: 16731
Reputation: 29714
There's no need for all these workarounds anymore. You can now use alias
in dotnet from v16.7+. Details here.
So none of the workarounds here are required anymore. Simply add the alias into your project file (intelli-sense didn't seem to think this existed but it works):
<ProjectReference Include="Example.csproj" Aliases="ExampleAlias" />
then use the extern alias ExampleAlias;
code as you would for .Net framework:
extern alias ExampleAlias;
using ExampleAlias::Namespace;
and everything works. Docs for that here
Upvotes: 9
Reputation: 2882
I had a problem in .Net Core 2.2 where the MySqlConnector
type name and namespace had a collision and the answer was to create an alias. I think this should work for your needs too, just change MySqlConnector
below accordingly: https://stackoverflow.com/a/48686823/479701
<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'MySqlConnector'">
<Aliases>MySqlConnectorAlias</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
then in your cs file before usings:
extern alias MySqlConnectorAlias;
then reference your type like this:
MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection
Upvotes: 7
Reputation: 5427
I believe the issue you are trying to link to is here:
https://github.com/NuGet/Home/issues/4989
You can workaround by using an MSBuild Target. drop this snippet into 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>
and then use it in your csproj in your PackageReference nodes like this:
<ItemGroup>
<PackageReference Include="StackExchange.Redis.StrongName" Version="1.2.6" Alias="signed" />
</ItemGroup>
added this as a comment to the GitHub issue:
https://github.com/NuGet/Home/issues/4989#issuecomment-426666530
Upvotes: 14
Reputation: 17
You can do it in this way:
extern alias Lib1;
extern alias Lib2;
using System;
using SpaceOne=Lib1::Space;
using SpaceTwo=Lib2::Space;
Example you can find here: https://github.com/ernado-x/owl/blob/master/src/Owl/Program.cs
Upvotes: -2
Reputation: 6293
There is no support for this at the moment. Feel free to file an issue in dotnet cli repo https://github.com/dotnet/cli/issues
Upvotes: 0