On July 12, 2017, websites, Internet users, and online communities will come together to sound the alarm about the FCC’s attack on net neutrality. Learn how you can join the protest and spread the word at https://www.battleforthenet.com/july12/. I plan on participating in this demonstration using my blog to lay out why net neutrality is so pivotal in our world today.
Right now, new FCC Chairman and former Verizon lawyer Ajit Pai has a plan to destroy net neutrality and give big cable companies immense control over what we see and do online. If they get their way, the FCC will give companies like Comcast, Verizon, and AT&T control over what we can see and do on the Internet, with the power to slow down or block websites and charge apps and sites extra fees to reach an audience.
If we lose net neutrality, we could soon face an Internet where some of your favorite websites are forced into a slow lane online, while deep-pocketed companies who can afford expensive new “prioritization” fees have special fast lane access to Internet users – tilting the playing field in their favor.
But on July 12th, the Internet will come together to stop them. Websites, Internet users, and online communities will stand tall, and sound the alarm about the FCC’s attack on net neutrality.
The Battle for the Net campaign will provide tools for everyone to make it super easy for your friends, family, followers to take action. From the SOPA blackout to the Internet Slowdown, we’ve shown time and time again that when the Internet comes together, we can stop censorship and corruption. Now, we have to do it again!
Learn more and join the action here: https://www.battleforthenet.com/july12
One issue that I have ran into many times is the issue of trying to use version specific DLLs in a .NET solution we’re deploying to a client and that client having a different version of that DLL in their global address cache (GAC). Because of the way .NET handles this situation, when it tries to load a referenced DLL, if the framework finds a DLL of the same signature in the GAC, it will use the GAC version regardless of the version (even if it is not the same as the one that was used during the compilation of the solution). Obviously this can cause issues especially if you don’t have control over the referenced DLLs. We ran into this issue using the Microsoft SQL DLLs (I lothe Microsoft.SqlServer.BatchParser in ways that are unquantifiable).
Here’s where Costura comes to the rescue, to show this process I created a test project and added some SQL DLLs as references to the project.
And when you build this project you get an EXE with those SQL DLLs in the bin/Debug folder.
This poses an issue if the computer this is ran on has another version of these DLLs in its GAC as it will use those versions instead of those in this folder. So now let’s add Costura to the project via Nuget.
You’ll notice that Costura is added as a reference and the FodyWeavers.xml is added to the project. Modifying the FodyWeavers.xml allows us to add unmanaged assemblies (like the BatchParser) as part of the project too.
Now that Costura is added, any project reference we set Copy Local as True will be compiled into the resulting project EXE.
Now when we build the bin/Debug folder looks a lot less cluttered, you’ll notice all of the DLLs are now gone and we have only the project’s EXE sitting in there. You may notice that the size of the EXE has increased dramatically. This is because it now contains all of the referenced DLLs.
When we run the project now, since the application does not have to reference an external reference for those DLLs, it does not look in the GAC and therefore will not use an unintended version of the DLL regardless of what the client has installed on their machine.
So I’ve wanted to start this blog for a while now but finally got my blog writing footing by starting to write about Dynamics 365 for Operations. I want to write about things I run into on a day to day basis when doing software development and focus writing around .NET programming, dealing with Azure databases, and overall programming tips and tricks I use on a day to day basis.