visual-studio-2008 - snippets - visual studio code close tags
HintPath en una referencia aƱadida en Visual Studio (5)
Puede usar variables de entorno para eso. P.ej
<Reference Include="System.ComponentModel.Composition.Codeplex">
<HintPath>$(PathToDLLs)/MEF2_Preview2/bin/System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>
Sé que puedo agregar HintPath a una DLL externa para ayudar a Visual Studio / TFS a encontrar la DLL cuando se compila.
Lo que me preguntaba es ... ¿es posible agregar múltiples HintPath ?
Por ejemplo ... los desarrolladores tienen sus DLL para un lugar y hacemos un GetLatest de esos DLL en un lugar diferente en el servidor, de ahí la necesidad de HintPath múltiple.
¿Qué piensas, mundo?
Lo sentimos, no puedes usar múltiples HintPath. Visual Studio / MSBuild toma solo la última definición de <HintPath>
e ignorará las anteriores. Confirmado en VS2010 y VS2012.
Agregue lo siguiente al final de su archivo de proyecto justo después de la sección de objetivos comentados:
<Target Name="BeforeResolveReferences">
<CreateProperty Value="YOUR_FIRST_PATH;YOUR_SECOND_PATH;$(AssemblySearchPaths)">
<Output TaskParameter="Value" PropertyName="AssemblySearchPaths" />
</CreateProperty>
</Target>
Reemplazando YOUR_FIRST_PATH
y YOUR_SECOND_PATH
con tus rutas.
Es importante que esto vaya después de la siguiente línea o su configuración se sobrescribirá:
<Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" />
Con la entrada $(AssemblySearchPaths)
al final de la cadena de archivos DLL en sus rutas anulará la resolución normal. Si lo mueve al principio, entonces se intenta primero la resolución normal y se comprueban las rutas adicionales que no se encontraron. La resolución normal incluye secciones de <HintPath>
, por lo que no es necesario eliminarlas si sus rutas son lo primero.
Con la condición de que puede:
<Reference Include="TheAssembly">
<HintPath Condition="Exists(''../My/Assembly/Path'')">../My/Assembly/Path/TheAssembly.dll</HintPath>
<HintPath Condition="Exists(''../../My/Assembly/Path'')">../../My/Assembly/Path/TheAssembly.dll</HintPath>
<HintPath Condition="Exists(''../../../My/Assembly/Path'')">../../../My/Assembly/Path/TheAssembly.dll</HintPath>
<HintPath Condition="Exists(''../../../../My/Assembly/Path'')">../../../../My/Assembly/Path/TheAssembly.dll</HintPath>
<HintPath Condition="Exists(''../../../../../My/Assembly/Path'')">../../../../../My/Assembly/Path/TheAssembly.dll</HintPath>
<HintPath Condition="Exists(''../../../../../../My/Assembly/Path'')">../../../../../../My/Assembly/Path/TheAssembly.dll</HintPath>
<HintPath Condition="Exists(''../../../../../../../My/Assembly/Path'')">../../../../../../../My/Assembly/Path/TheAssembly.dll</HintPath>
etc...
</Reference>
Se usará la última HintPath donde la condición se evalúa como verdadera.
Esta respuesta ya no es válida. Como dice el comentario de Sardaukar , Visual Studio siempre utiliza a ciegas el último HintPath . La respuesta de Alex apoya esto.
Bien. Esta vez soy más rápido que . Traté de agregarlo y parece funcionar bien.
Entonces, HintPath múltiple es posible.
Cuando tienes esto:
<Reference Include="System.ComponentModel.Composition.Codeplex">
<HintPath>../../../MEF2_Preview2/bin/System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>
Simplemente puede agregar más ruta de pista así:
<Reference Include="System.ComponentModel.Composition.Codeplex">
<HintPath>../../../MEF2_Preview2/bin/System.ComponentModel.Composition.Codeplex.dll</HintPath>
<HintPath>D:/MEF/System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>