Even now, with the project already ongoing, you can still set things straight. Put your project in source control. Then create a "master" branch that will contain the code released to production. Develop new features in a separate "develop" branch. If you need to fix something in production without updating to the version in development, create a new branch off "master", fix the issue, commit and release this new version, merge it into develop, and carry on.
A workflow like this, or other variations, is a good practice even if you work with platforms that support deploying single classes/files instead of packages.
Sounds like the wrong project type is being picked. If they used a Web Site Project rather than a Web Application Project the files would be compiled JIT in the same way as PHP and Python.
Having said which the page title is wrong, the issue is with Microsoft's web deployment system and frameworks. C# as a language is still a nice language and shouldn't be lumped with the other parts of the .NET stack.
As others have said this is really a source control problem but still there's a workaround. Just copy the production dll and use .Net Reflector (or similar) to decompile it back in to C#. Make your edits, recompile and upload.
A workflow like this, or other variations, is a good practice even if you work with platforms that support deploying single classes/files instead of packages.
For an example, see: A successful Git branching model (http://nvie.com/posts/a-successful-git-branching-model/).
See also the book "The Pragmatic Programmer: From Journeyman to Master" (http://pragprog.com/the-pragmatic-programmer/extracts/toc).
Good luck.