escaping dll hell
TRANSCRIPT
![Page 1: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/1.jpg)
Escaping DLL Hell
![Page 2: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/2.jpg)
João Bragança//github.com/thefringeninja//the.fringe.ninja/blog@thefringeninja
![Page 3: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/3.jpg)
eVision SoftwareSafety Software for Oil & GasDen Haag, Netherlands//evision-software.com
![Page 4: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/4.jpg)
Computing circa 1992●Premium PC
o486 DX2o16 MB Ramo$3-$5k
![Page 5: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/5.jpg)
Computing circa 1992●Premium PC
o486 DX2o16 MB Ramo$3-$5k
●Windows 3.1
![Page 6: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/6.jpg)
Computing circa 1992●Premium PC
o486 DX2o16 MB Ramo$3-$5k
●Windows 3.1●Extremely Limited by Today’s Standards
![Page 7: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/7.jpg)
Computing circa 1992●Premium PC
o486 DX2o16 MB Ramo$3-$5k
●Windows 3.1●Extremely Limited by Today’s Standards●Shared Memory
![Page 8: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/8.jpg)
![Page 9: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/9.jpg)
2001 - .NET Framework 1.0●AppDomain
![Page 10: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/10.jpg)
2001 - .NET Framework 1.0●AppDomain●Global Assembly Cache
![Page 11: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/11.jpg)
Problems●Pain of Manually Loading Assemblies
![Page 12: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/12.jpg)
Problems●Pain of Manually Loading Assemblies●Must use Child AppDomain + Marshalling
![Page 13: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/13.jpg)
Problems●Pain of Manually Loading Assemblies●Must use Child AppDomain + Marshalling●Strong Naming
![Page 14: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/14.jpg)
Escaping DLL GAC Hell
![Page 15: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/15.jpg)
2010 - .Net Package Managers●OpenWrap
![Page 16: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/16.jpg)
2010 - .Net Package Managers●OpenWrap●NuPack
![Page 17: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/17.jpg)
2010 - .Net Package Managers●OpenWrap●NuPack●NuGet
![Page 18: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/18.jpg)
Problems●Assembly Binding Redirect - Never Works
Right
![Page 19: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/19.jpg)
![Page 20: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/20.jpg)
Problems●Assembly Binding Redirect - Never Works
Right●Requires SemVer be Followed - It Isn’t
![Page 21: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/21.jpg)
Problems●Assembly Binding Redirect - Never Works
Right●Requires SemVer be Followed - It Isn’t●Strong Naming (again)
![Page 22: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/22.jpg)
Escaping DLL GAC Nuget Hell
![Page 23: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/23.jpg)
Escaping DLL GAC Nuget Hell
SHARED DEPENDENCIES
![Page 24: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/24.jpg)
Solution
![Page 25: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/25.jpg)
(Some) Upfront Design
Solution
![Page 26: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/26.jpg)
Service Oriented Architecture
![Page 27: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/27.jpg)
Service Oriented Architecture●CORBA
![Page 28: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/28.jpg)
Service Oriented Architecture●CORBA●DCOM
![Page 29: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/29.jpg)
Service Oriented Architecture●CORBA●DCOM●Web Services (WCF)
![Page 30: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/30.jpg)
Service Oriented Architecture●CORBA●DCOM●Web Services (WCF)●Micro Services
![Page 31: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/31.jpg)
Service Oriented Architecture●CORBA●DCOM●Web Services (WCF)●Micro Services●Nano Services
![Page 32: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/32.jpg)
Service Oriented Architecture●CORBA●DCOM●Web Services (WCF)●Micro Services●Nano Services●Femto Services
![Page 33: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/33.jpg)
Service Oriented Architecture●CORBA●DCOM●Web Services (WCF)●Micro Services●Nano Services●Femto Services
![Page 34: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/34.jpg)
Service Oriented Architecture●CORBA●DCOM●Web Services (WCF)●Micro Services●Nano Services●Femto Services
![Page 35: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/35.jpg)
Service Oriented ArchitectureJust Services.
![Page 36: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/36.jpg)
Service Oriented Architecture●[A Service is] a logical representation of a
repeatable business activity that has a specified outcome
![Page 37: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/37.jpg)
Service Oriented Architecture●[A Service is] a logical representation of a
repeatable business activity that has a specified outcome
●Is self-contained
![Page 38: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/38.jpg)
Service Oriented Architecture●[A Service is] a logical representation of a
repeatable business activity that has a specified outcome
●Is self-contained●May be composed of other services
![Page 39: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/39.jpg)
Service Oriented Architecture●[A Service is] a logical representation of a
repeatable business activity that has a specified outcome
●Is self-contained●May be composed of other services●Is a “black box” to consumers of the service
![Page 40: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/40.jpg)
Service Oriented Architecture●[A Service is] a logical representation of a
repeatable business activity that has a specified outcome
●Is self-contained●May be composed of other services●Is a “black box” to consumers of the service●These are just fancy words for “a function.”
![Page 41: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/41.jpg)
Service Oriented Architecturepublic delegate Task<decimal> GetAccountBalance(string accountNumber)
![Page 42: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/42.jpg)
Service Oriented Architecture●Use these functions for inter-component
communication
![Page 43: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/43.jpg)
Service Oriented Architecture●Use these functions for inter-component
communication●Keep boundaries crisp
![Page 44: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/44.jpg)
Onion Architecture
Solution
![Page 45: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/45.jpg)
Onion Architecture
![Page 46: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/46.jpg)
Onion Architecture●Center Takes No Dependencies
![Page 47: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/47.jpg)
Onion Architecture●Center Takes No Dependencies●Ports and Adapters
![Page 48: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/48.jpg)
Onion Architecture●Center Takes No Dependencies●Ports and Adapters●Dependencies Point Inwards
![Page 49: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/49.jpg)
Onion Architecture●Center Takes No Dependencies●Ports and Adapters●Dependencies Point Inwards●Keep Implementations on the Outside
oDatabaseoHttp
![Page 50: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/50.jpg)
OWIN
Solution
![Page 51: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/51.jpg)
OWIN●The only dependency is on mscorlib.
![Page 52: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/52.jpg)
OWINAppFunc:
Func<IDictionary<string, object>, Task>
MidFunc:Func<AppFunc, AppFunc>
![Page 53: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/53.jpg)
OWIN●The only dependency is on mscorlib●Reduces Δ between production and
development
![Page 54: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/54.jpg)
OWIN●The only dependency is on mscorlib.●Reduces Δ between production and
development●Fast integration tests - possible to test entire
pipeline in memory
![Page 55: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/55.jpg)
ILMerge / ILRepack
Solution
![Page 56: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/56.jpg)
ILMerge / ILRepack●Merges multiple assemblies into one
![Page 57: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/57.jpg)
ILMerge / ILRepack●Merges multiple assemblies into one●Internalization
![Page 58: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/58.jpg)
ILMerge / ILRepack●Merges multiple assemblies into one●Internalization●Virtually eliminates shared dependency
problem
![Page 59: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/59.jpg)
Source Packages
Solution
![Page 60: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/60.jpg)
Source Packages●SimpleJson
![Page 61: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/61.jpg)
Source Packages●SimpleJson●LibLog
![Page 62: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/62.jpg)
![Page 63: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/63.jpg)
Source Packages●SimpleJson●LibLog●netfx-Guard
![Page 64: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/64.jpg)
Putting it Together
Solution
![Page 65: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/65.jpg)
Putting it Together
Sales
![Page 66: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/66.jpg)
Putting it Together
Sales Ware-house
![Page 67: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/67.jpg)
Putting it Together
Sales Ware-house
GetInventoryCountFunc<string, Task<int>>
IsItemAvailableFunc<string, int, Task<bool>>
![Page 68: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/68.jpg)
Putting it Together
Sales Ware-house
GetInventoryCountFunc<string, string,
Task<int>>
IsItemAvailableFunc<string, int, Task<bool>>
![Page 69: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/69.jpg)
Questions?
![Page 70: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/70.jpg)
Resources●//github.com/gluck/il-repack●//owin.org●//github.com/damianh/LimitsMiddleware●//github.com/damianh/LibLog
![Page 71: Escaping DLL Hell](https://reader035.vdocuments.mx/reader035/viewer/2022062502/589b96411a28abc0098b7157/html5/thumbnails/71.jpg)
João Bragança//github.com/thefringeninja//the.fringe.ninja/blog@thefringeninja