C# 如何将外部别名与nuget一起使用
我在项目中使用C# 如何将外部别名与nuget一起使用,c#,nuget,C#,Nuget,我在项目中使用extern别名,因此需要将引用别名从global更改为其他名称。问题是,如果使用Nuget添加引用,则每次更新包时,别名都会恢复为global。有没有办法阻止这种情况发生?这是不可能的,因为在nuget update之后,它会删除以前的程序集并添加一个新程序集,以便删除具有别名的程序集。。。因此,您必须再次将别名添加到新更新的程序集。您可以向NuGet软件包添加别名。但是包的使用者将无法选择不添加别名。下面是一些可以在脚本中使用的代码。我不是powershell最棒的,所以可能有
extern别名
,因此需要将引用别名从global
更改为其他名称。问题是,如果使用Nuget添加引用,则每次更新包时,别名都会恢复为global
。有没有办法阻止这种情况发生?这是不可能的,因为在nuget update之后,它会删除以前的程序集并添加一个新程序集,以便删除具有别名的程序集。。。因此,您必须再次将别名添加到新更新的程序集。您可以向NuGet软件包添加别名。但是包的使用者将无法选择不添加别名。下面是一些可以在脚本中使用的代码。我不是powershell最棒的,所以可能有更好的方法:)
这是nuget参考的已知问题;在程序集别名完全不受支持的情况下(目前): 幸运的是,存在变通办法;您可以将特殊目标添加到csproj中,以便动态分配别名:
<Target Name="ChangeAliasesOfNugetRefs" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'CoreCompat.System.Drawing'">
<Aliases>CoreCompatSystemDrawing</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
核心系统图
感谢csproj目标更改程序集引用的别名
我已使用它修复System.Data.Services.Client/Microsoft.Data.Services.Client冲突,如下所示:
错误CS0433:类型“DataServiceContext”在这两个数据库中都存在
'Microsoft.Data.Services.Client,版本=5.8.3.0,区域性=中性,
PublicKeyToken=31bf3856ad364e35'和'System.Data.Services.Client,
版本=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>
遗产
有没有办法使这一过程自动化?您可以阅读更多关于。。这可能会有所帮助。考虑到这个问题,这可能是显而易见的,但您可以使用extern alias CoreCompatSystemDrawing代码>最重要的是你的.cs文件中的所有用法。你救了我;这正是我遇到问题的图书馆。谢谢。现在从NuGet 5.7开始支持它:
<!--
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>