2009-01-20 6 views
32

Sé que puedo agregar un HintPath a un archivo DLL externo para ayudar a Visual Studio/TFS a encontrar el archivo DLL cuando se compila.HintPath en una referencia agregada en Visual Studio

Lo que me preguntaba es ... ¿es posible agregar múltiples HintPath?

Por ejemplo ... los desarrolladores tienen sus archivos DLL para un lugar y hacemos un GetLatest de esos archivos DLL en un lugar diferente en el servidor, por lo tanto, la necesidad de múltiples HintPath.

¿Qué piensas, mundo?

Respuesta

14

Esta respuesta ya no es válida. Como dice Sardaukar's comment, Visual Studio siempre utiliza a ciegas la última HintPath. Alex's answer es compatible con esto.


Alright. Esta vez soy más rápido que Stackoverflow. Traté de agregarlo y parece funcionar bien.

De modo que es posible HintPath múltiple.

Cuando se tiene esto:

<Reference Include="System.ComponentModel.Composition.Codeplex"> 
    <HintPath>..\..\..\MEF2_Preview2\bin\System.ComponentModel.Composition.Codeplex.dll</HintPath> 
</Reference> 

Usted puede simplemente añadir más ruta indirecta de esa manera:

<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> 
+1

¿Acaba de agregar múltiples entradas HintPath, o tiene múltiples rutas en una sola entrada? –

+1

si fue una sola entrada, ¿estaba separada por comas o punto y coma? – Maslow

+2

¿Podría decirnos cómo es posible? – Nick

8

Puede utilizar 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> 
37

lo siento, ¿No uso de múltiples HintPath. Visual Studio/MSBuild toma solo la última<HintPath> definición e ignorará las anteriores. Confirmado en VS2010 y VS2012.

+5

Esta respuesta debe ser la aceptada, ya que la otra está dando información falsa. –

+1

Puede usar múltiples HintPath con una Condición en cada una. Verifique mi respuesta a continuación. – Wolf5

+0

Confirmado que solo el último HintPath también se usa en VS2015. –

2

Añadir lo siguiente a la parte inferior de su archivo de proyecto justo después de la sección de objetivos comentado:

<Target Name="BeforeResolveReferences"> 
    <CreateProperty Value="YOUR_FIRST_PATH;YOUR_SECOND_PATH;$(AssemblySearchPaths)"> 
    <Output TaskParameter="Value" PropertyName="AssemblySearchPaths" /> 
    </CreateProperty> 
</Target> 

Sustitución YOUR_FIRST_PATHYOUR_SECOND_PATH y con sus caminos.

Es importante que esto va detrás de la línea siguiente o su entorno se sobrescribirá:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Con la entrada $(AssemblySearchPaths) al final de los archivos DLL de cadena en sus caminos 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 <HintPath>, por lo que no es necesario eliminarlas si sus rutas son lo primero.

3

condición que usa se puede: se utilizará

<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> 

La última HintPath donde la condición se evalúa como verdadera.

+0

¿Funciona esto con la observación anterior sobre el último hintpath que se está tomando? ¿Ignora hintpaths con condiciones falsas y toma el último con un valor verdadero? –

+0

Ignora todo menos el último donde la condición es verdadera. – Wolf5

Cuestiones relacionadas