我在我的項目中使用extern alias
,所以我需要將參考別名從global
更改爲其他名稱。問題是,如果我使用Nuget添加引用,則每次更新包時,別名都將恢復爲global
。有沒有辦法阻止這種情況發生?如何在nuget中使用extern別名
2
A
回答
1
這是不可能的,因爲在nuget更新後,它會刪除先前的程序集並添加一個新程序集,以便刪除程序集的別名...因此您必須將新別名重新添加到新更新的程序集中。
1
您可以將install script添加到NuGet包中以添加別名。但是包的使用者將無法選擇不添加別名。以下是您可以在腳本中使用的一些代碼。我不是最強大的PowerShell,所以可能有更好的方式來做到這一點:)
# Standard Install.ps1 parameter list
param($installPath, $toolsPath, $package, $project)
# Name of the alias
$alias = 'MyAlias'
# Load the Microsoft.Build assembly to be able to access MS Build types
Add-Type -AssemblyName Microsoft.Build
# Load the csproj file
$projectObject = New-Object Microsoft.Build.Evaluation.Project($project.FullName)
# Search through the project items to find all references
$referenceItems = $projectObject.Items | where ItemType -eq "Reference"
# Find the reference that matches the package id
# (this assumes your assembly name matches your package id)
$item = $referenceItems | select @{Name='Reference'; Expression={$_}},@{Name='AssemblyName'; Expression={(New-Object System.Reflection.AssemblyName($_.UnevaluatedInclude)).Name}} | where AssemblyName -eq $package.Id | select Reference
# If the reference doesnt already have an alias, add one and save the project
if (($item.Reference.Metadata | where Name -eq 'Aliases') -eq $null) {
$item.Reference.SetMetadataValue('Aliases', $alias)
$projectObject.Save()
}
# Unload the project when done
$projectObject.ProjectCollection.UnloadAllProjects()
2
這是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>
相關問題
- 1. 如何在NuGet簽名中使用ApiKey
- 2. 使用`extern`用typedef名
- 3. 如何在命名空間中正確使用extern?
- 4. 使用extern和使用getter的區別?
- 5. 如何使用別名在
- 6. EXTERN陣列,如何使用
- 7. 你如何在python中使用別名?
- 8. Elixir - 如何在doctest中使用別名?
- 9. 如何在jOOQ中使用別名
- 10. 如何在SELECT中使用別名
- 11. 如何在mySQL中使用bash別名
- 12. 如何在querydsl中使用別名?
- 13. 如何在SELECT中使用COUNT別名?
- 14. 如何在ui-router中使用別名?
- 15. Cmder:如何在另一個別名中使用別名?
- 16. 什麼時候我們必須在C#中使用extern別名關鍵字?
- 17. 在Swift中使用extern「C」?
- 18. 在Clojurescript中使用「extern」s
- 19. 在C++中使用extern
- 20. 使用和extern有什麼區別?
- 21. 如何使用AS別名
- 22. 如何使用Ransack別名
- 23. 如何使用Vagrant中的別名
- 24. 如何使用查詢別名在MySQL
- 25. 在MySql中使用別名
- 26. 在Ext.data.store中使用別名
- 27. 的extern使用
- 28. 如何在Access SQL的列別名中使用表名?
- 29. 如何在角度cli中使用模塊名稱別名?
- 30. 如何使用MassTransit.MongoDb nuget包?
是否有辦法來自動完成這一過程? –
你可以閱讀更多關於[**擴展NuGet命令行**](http://devlicio.us/blogs/rob_reynolds/archive/2011/07/15/extend-nuget-command-line.aspx)..也許它有助於 –