2009-01-20 17 views
32

Tôi biết rằng tôi có thể thêm HintPath vào một DLL bên ngoài để giúp Visual Studio/TFS tìm thấy tệp khi nó xây dựng.HintPath trên một tham chiếu được thêm vào trong Visual Studio

Điều tôi thắc mắc là ... có thể thêm nhiều HintPath không?

Ví dụ ... nhà phát triển có DLL của họ cho một địa điểm và chúng tôi thực hiện GetLatest của những tệp DLL đó ở một vị trí khác trên máy chủ do đó cần nhiều HintPath.

Bạn nghĩ thế nào?

Trả lời

14

Câu trả lời này không còn giá trị. Như Sardaukar's comment nói, Visual Studio luôn mù quáng sử dụng HintPath cuối cùng. Alex's answer hỗ trợ điều này.


Được rồi. Tôi nhanh hơn Stackoverflow lần này. Tôi đã cố gắng để thêm nó và nó có vẻ làm việc tốt.

Có thể có nhiều HintPath.

Khi bạn có điều này:

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

Bạn có thể chỉ cần thêm đường gợi ý nhiều hơn như thế:

<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

Bạn vừa thêm nhiều mục nhập HintPath hay có nhiều đường dẫn trong một mục nhập? –

+1

nếu mục nhập duy nhất, nó có được phân cách bằng dấu phẩy hoặc dấu chấm phẩy không? – Maslow

+2

Bạn có thể cho chúng tôi biết làm thế nào nó có thể? – Nick

8

Bạn có thể sử dụng các biến môi trường cho điều đó. Ví dụ.

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

Xin lỗi, bạn không thể sử dụng nhiều HintPath của. Visual Studio/MSBuild chỉ mất định dạng<HintPath> mới nhất và sẽ bỏ qua bất kỳ định dạng nào trước đó. Được xác nhận trong VS2010 và VS2012.

+5

Câu trả lời này phải là câu trả lời được chấp nhận, vì câu trả lời khác là đưa ra thông tin sai lệch. –

+1

Bạn có thể sử dụng nhiều HintPath với Điều kiện trên mỗi. Kiểm tra câu trả lời của tôi dưới đây. – Wolf5

+0

Xác nhận rằng chỉ HintPath cuối cùng được sử dụng trong VS2015. –

2

Thêm dòng sau vào dưới cùng của tập tin dự án của bạn ngay sau khi nhận xét ra phần mục tiêu:

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

Thay YOUR_FIRST_PATHYOUR_SECOND_PATH với đường dẫn của bạn.

Điều quan trọng này đi sau khi dòng sau hoặc thiết lập của bạn sẽ được ghi đè:

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

Với $(AssemblySearchPaths) nhập ở phần cuối của các DLL chuỗi trong đường dẫn của bạn sẽ ghi đè lên độ phân giải bình thường. Nếu bạn di chuyển nó đến đầu thì độ phân giải bình thường được thử trước và các đường dẫn bổ sung sẽ được kiểm tra cho bất kỳ kết quả nào không được tìm thấy. Độ phân giải bình thường bao gồm <HintPath> phần do đó không cần phải xóa chúng nếu đường dẫn của bạn đến trước.

3

Sử dụng Điều kiện bạn có thể:

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

Các HintPath cuối cùng nơi Điều kiện để đánh giá đúng sẽ được sử dụng.

+0

Điều này có hoạt động với quan sát trên về đường gợi ý cuối cùng đang được thực hiện không? Liệu nó bỏ qua các đường dẫn với các điều kiện sai và lấy giá trị cuối cùng với một giá trị thực? –

+0

Nó bỏ qua tất cả trừ điều cuối cùng trong đó điều kiện là đúng. – Wolf5

Các vấn đề liên quan