URL and Assembly Loading

A URL is a string used to locate a resource in the Internet.

 

Raw URLs are simply sequences of (Unicode) characters. For example, URL https://server/dir/%file.htm represent a file called “%file.htm” in the virtual directory “dir” of an http server “server”.

 

Raw URLs sometimes are called “Unescaped URLs”.

 

According to the URL RFC (https://www.ietf.org/rfc/rfc1738.txt),

 

    Octets must be encoded if they have no corresponding graphic
    character within the US-ASCII coded character set, if the use of the
    corresponding character is unsafe, or if the corresponding character
    is reserved for some other interpretation within the particular URL
    scheme.

 

A raw URL may include those characters. Thus a raw URL usually requires encoding before it is transported. A typical encoding scheme is to UTF8 encode the raw URL, then encode all the non graphic characters, unsafe characters, and the reserved characters with a character triplet consisting of the character “%” followed by the two hexadecimal digits (from "0123456789ABCDEF") which forming the hexadecimal value of the octet.

 

The raw URL example above https://server/dir/%file.htm will be encoded to https://server/dir/%25file.htm

 

The encoded URLs sometimes are called “Escaped URLs”.

 

In general URLs are written as follows:

 

      <scheme>:<scheme-specific-part>
  

Some common schemes are ftp, http, https, file, news, nntp, mailto, telnet.

 

In .Net framework, for Assembly loading, we only support Raw URLs with scheme of either http, https or file. This includes Assembly.LoadFrom, and codebase hint in config files.

 

In .Net framework 1.0/1.1, we have a bug that we did not handle Unicode URLs correctly. This is fixed in .Net framework 2.0. We may backport the fix to 1.0/1.1, depending on the demand.