Sé que puedo agregar un HintPath a un DLLs externas a la ayuda de Visual Studio y TFS encontrar el archivo dll cuando se construye.

Lo que me pregunto es… ¿es posible añadir múltiples HintPath?

Por ejemplo… los desarrolladores tienen sus Dll para un lugar y hacemos un GetLatest de esos archivos Dll en un lugar diferente en el servidor de ahí la necesidad de múltiples HintPath.

¿Qué piensa usted, mundo?

5 Comentarios

  1. 38

    Lo siento, usted no puede uso de múltiples HintPath del. Visual Studio/MSBuild toma sólo la última <HintPath> definición e ignorará cualquier de los anteriores. Confirmado en VS2010 y VS2012.

    • Esta respuesta debe ser aceptado, ya que el otro es dar información falsa.
    • Se pueden utilizar varios HintPath con una Condición en cada uno. Compruebe mi respuesta a continuación.
    • Confirmó que sólo la última HintPath se utiliza en VS2015 demasiado.
  2. 14

    Esta respuesta no es válida. Como Sardaukar comentario dice, Visual Studio siempre ciegamente utiliza la última HintPath. Alex respuesta apoya esto.


    Bien. Yo soy más rápido que Stackoverflow este tiempo. He intentado añadir y parece que funciona bien.

    Por lo que varias HintPath ES posible.

    Cuando tienes esta:

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

    Usted puede simplemente añadir más de sugerencia de ruta como que:

    <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>
    
    • ¿Usted acaba de agregar varios HintPath entradas, o tiene varias rutas en una sola entrada?
    • si de entrada único, fue separados por comas o punto y coma?
    • Podría usted por favor, díganos cómo es posible?
    • Para hacer esto, yo cerca de la solución, abra el archivo de proyecto en el Bloc de notas (que termina .csproj), entonces usted va a ver en el código anterior.
    • (Se encuentra esta pregunta a la hora de resolver un problema con hintpaths y tengo que corregir la respuesta anterior). Su respuesta es errónea. Sí, usted puede agregar múltiples hintpaths manualmente para su archivo csproj, pero Visual Studio sólo se hará uso de la última hintpath elemento. Probablemente trabaja en su situación porque su segundo hintpath puede ser resuelto. Intente cambiando su hintpaths para que d:\MEF\System.ComponentModel.Composition.CodePlex.dll es la primera. A continuación, compilar. Probablemente verás que Visual Studio ahora intente hacer referencia a la última hintpath.
    • Agradezco lo que estamos tratando de hacer, pero un simple descargo de responsabilidad con enlaces útiles es todo lo que se necesita. Una llamada explícita para downvotes o upvotes en una gran renuncia como que es un camino peligroso para emprender.
    • Bien dicho.

  3. 8

    Puede usar variables de entorno para que. E. g.

    <Reference Include="System.ComponentModel.Composition.Codeplex">
        <HintPath>$(PathToDLLs)\MEF2_Preview2\bin\System.ComponentModel.Composition.Codeplex.dll</HintPath>
    </Reference>
    
  4. 3

    Condiciones de uso, usted 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>
    

    La última HintPath donde la Condición se evalúa como true será utilizado.

    • Hace este trabajo con la observación anterior acerca de la última hintpath están tomando? Hace ignorar hintpaths con falsa condiciones y tomar el último con un verdadero valor?
    • Ignora todos, pero la última, donde la condición es verdadera.
  5. 2

    Agregar lo siguiente al final del archivo de proyecto justo después de la comentada objetivos sección:

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

    Sustitución de YOUR_FIRST_PATH y YOUR_SECOND_PATH con tus sendas.

    Es importante que este va después de la línea o su configuración sobrescribe:

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

    Con el $(AssemblySearchPaths) entrada al final de la cadena de Dll en sus senderos anular la resolución normal. Si usted se muda al principio, a continuación, la resolución normal que se trató de la primera y las rutas adicionales se verificado que no se han encontrado. La resolución Normal incluye <HintPath> secciones así que no hay necesidad de quitar si sus caminos son lo primero.

Dejar respuesta

Please enter your comment!
Please enter your name here