proyectos “Sitio Web” en Visual Studio son una cosa extraña. Parecen ser un intento de atender a los desarrolladores web tradicionales, donde un "sitio" es solo un conjunto de archivos en un directorio. De la misma manera, cuando haces un proyecto de "Sitio web" en Visual Studio, no hay un archivo de "proyecto" real, como los proyectos de C# tienen un archivo .csproj. Sin embargo, todavía hay un archivo de solución (.sln). Normalmente, las referencias de ensamblaje .dll se guardan en el archivo de proyecto. Dado que un sitio web no tiene uno, ¿a dónde van?
Las referencias a otros proyectos
Si se agrega una referencia a otro proyecto, a continuación, una entrada se realizan en la solución .sln archivo. Se termina pareciéndose a esto: Referencias
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "..\..\WebSites\WebSite1\", "{F25DB9D6-810D-4C18-ACBB-BFC420D33B20}"
ProjectSection(WebsiteProperties) = preProject
TargetFramework = "3.5"
ProjectReferences = "{11666201-E9E8-4F5A-A7AB-93D90F3AD9DC}|ClassLibrary1.dll;"
sistema de archivos
Si navega con el sistema de archivos y agrega un archivo .dll, a continuación, Visual Studio creará un “.REFRESH” archivo con el mismo nombre en la carpeta \ Bin. Este archivo es solo un archivo de texto de 1 línea que indica la ruta desde la que se cargó el archivo. Entonces, por ejemplo, si agregué "MyAssem.dll" de .... \ libs, en la carpeta del sitio web \ Bin, terminaría con 2 archivos copiados allí: MyAssem.dll y MyAssem.dll.refresh. El archivo .refresh contendría el texto: ".... \ libs". En cada compilación, Visual Studio verificará la ruta en el archivo .refresh, y si existe un .dll más nuevo allí, sobrescribirá el que está en el directorio Bin.
Advertencia: Visual Studio NO arrojará un error si el archivo no existe donde lo pide el archivo .refresh. Simplemente continuará usando el .dll que ya está en la carpeta \ Bin. Sin embargo, emitirá una advertencia.
GAC Referencias
Si se agrega un ensamblado de la caché de ensamblados global, Visual Studio entrará en el archivo Web.config, así:
<compilation debug="false">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
De nuevo Lo que hay que observar aquí es que Visual Studio asume que si el ensamblado estaba en el GAC en su computadora de desarrollo, ¡estará en el mismo lugar en el tiempo de ejecución! Eso puede ocasionarle problemas si tiene instalado Oracle.DataAccess
en su máquina de desarrollo, lo que lo colocaría en el GAC, pero cuando implemente, simplemente copie el .dll en su lugar en la máquina de producción. Todavía intentará encontrarlo en el GAC y puede fallar en el tiempo de ejecución.
Espero que esto ayude a aclarar las rarezas de los sitios web y cómo funcionan las referencias.
Gracias hombre! Siempre tuve un problema con las referencias del proyecto y no noté que el archivo sln está cambiando cuando agregué la referencia del proyecto. –