我extern alias
在我的项目中使用,所以我需要将引用别名更改global
为其他内容.问题是,如果我使用Nuget添加引用,每次更新包时别名都会恢复为global
.有没有办法阻止这种情况发生?
Vit*_*nko 19
这是nuget引用的已知问题; 在汇编别名的情况下根本不支持别名:https://github.com/NuGet/Home/issues/4989
幸运的是,解决方法存在; 你可以在你的csproj中添加特殊目标,它将动态分配别名:
<Target Name="ChangeAliasesOfNugetRefs" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'CoreCompat.System.Drawing'">
<Aliases>CoreCompatSystemDrawing</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
Bor*_*nov 13
从 NuGet 5.7 和 Visual Studio 2019 Update 7 开始,PackageReference
现在支持Aliases
属性. 没有UI,但可以直接编辑项目文件:
<ItemGroup>
<PackageReference Include="NuGet.Versioning" Version="5.8.0" Aliases="ExampleAlias" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
然后在 C# 代码中:
extern alias ExampleAlias;
namespace PackageReferenceAliasesExample
{
...
{
var version = ExampleAlias.NuGet.Versioning.NuGetVersion.Parse("5.0.0");
Console.WriteLine($"Version : {version}");
}
...
}
Run Code Online (Sandbox Code Playgroud)
小智 5
感谢您提供用于更改程序集引用别名的 csproj 目标。
我用它来修复 System.Data.Services.Client/Microsoft.Data.Services.Client 冲突,如下所示:
错误CS0433:类型“DataServiceContext”存在于“Microsoft.Data.Services.Client,Version=5.8.3.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”和“System.Data.Services.Client,Version=4.0.0.0”中,文化=中立,PublicKeyToken=b77a5c561934e089'
解决办法是:
<!--
Avoid collision of older System.Data.Services.Client with newer Microsoft.Data.Services.Client
when mixed due to PackageReferences
-->
<Target Name="ChangeAliasesOfNugetRefs" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'System.Data.Services.Client'">
<Aliases>legacy</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3351 次 |
最近记录: |