2012-10-18 29 views
5

Tôi đang chạy thử nghiệm CodedUI tham chiếu đến DLL và DLL đó định cấu hình một tệp "cấu hình". Trong khi chạy các bài kiểm tra danh mục hiện tại trả về một trong những nơi CodedUI đặt các tập tin kết quả xét nghiệm Tôi đã sử dụngCách giải quyết Thư mục Hiện tại khi chạy Giao diện Người dùng Mã hoá

AppDomain.CurrentDomain.BaseDirectory 

System.Reflection.Assembly.GetExecutingAssembly().CodeBase 

System.Reflection.Assembly.GetExecutingAssembly().Location 

Những tất cả cho tôi cùng đường dẫn

Những gì tôi cần là lấy đường dẫn nơi tệp DLL cư trú vì đó là nơi cấu hình fi le sẽ được xây dựng.

Vị trí nơi điều này sẽ thay đổi nếu tôi đang gỡ lỗi hoặc nếu tôi chỉ chạy thử nghiệm (hiển nhiên) để tôi không thể sử dụng và điều hướng ngược lại hoặc bất kỳ thứ gì tương tự.

Có cách nào khác để lấy vị trí của tệp DLL mà bạn đang tham chiếu không ??

Edit:

Tôi đang tham khảo tập tin cấu hình này từ bên trong DLL mà tôi đang tham khảo.

+0

bất kỳ giải pháp cuối cùng nào có mã nguồn đầy đủ? – Kiquenet

Trả lời

3

Cho đến nay, nơi duy nhất tôi đã tìm thấy đường dẫn ban đầu để kiểm tra dll là trong một biến riêng trong ngữ cảnh thử nghiệm. Tôi đã kết thúc bằng cách sử dụng sự phản chiếu để có được giá trị và làm cho nó có thể sử dụng được.

using System.Reflection; 
    using Microsoft.VisualStudio.TestTools.UnitTesting; 
    public static string CodeBase(
     TestContext testContext) 
    { 
     System.Type t = testContext.GetType(); 
     FieldInfo field = t.GetField("m_test", BindingFlags.NonPublic | BindingFlags.Instance); 
     object fieldValue = field.GetValue(testContext); 
     t = fieldValue.GetType(); 
     PropertyInfo property = fieldValue.GetType().GetProperty("CodeBase"); 
     return (string)property.GetValue(fieldValue, null); 
    } 

Tôi đã sử dụng để lấy đường dẫn đến DLL đang chạy và sử dụng để chạy ứng dụng mà tôi biết được biên dịch đến cùng một vị trí như thử nghiệm.

Nếu có ai tìm được cách tốt hơn để nhận điều này, vui lòng cho tôi biết.

+0

Tôi cũng vừa mới triển khai các tài nguyên nhúng để hoàn thành nhiệm vụ tương tự nhưng điều này thật tuyệt! Tôi tự hỏi tại sao Microsoft quyết định triển khai thử nghiệm theo cách như vậy ... –

+0

Tôi chỉ muốn mọi người biết ai sử dụng điều này, đường dẫn trở lại thường là vị trí xây dựng của bạn và nếu bạn đang trong quá trình chạy thử nghiệm sử dụng đường dẫn được trả về từ điều này và bạn cố gắng tạo một bản dựng mới cùng một lúc , các tệp sẽ bị khóa trong khi chúng đang chạy và bạn có thể khiến thử nghiệm thất bại hoặc biên dịch thất bại hoặc cả hai. –

1

Cách tốt nhất để lấy thư mục chứa một DLL đã cho là sử dụng những điều sau đây trên một kiểu được định nghĩa trong hội đồng đó.

var type = typeof(TypeInThatAssembly); 
var path = Path.GetDirectory(type.Location); 

Thuộc tính CodeBaseLocation thường trở lại cùng một thông tin nhưng rất khác nhau

  • codebase: Tab này chứa các vị trí để lắp ráp như nó được tham chiếu trong tải
  • Location: Đây là nơi lắp ráp thực sự được nạp từ trên đĩa

Đây có thể khác với ứng dụng sử dụng tính năng chống bóng ied assemblies (Asp.Net, xUnit, vv ..)

+0

Cảm ơn đề xuất của bạn nhưng điều này khiến tôi có cùng một đường dẫn với hai chức năng khác. Tôi có thể cần làm rõ hơn. –

+0

Lý do điều này không hoạt động là vì nó đang được sao chép và sau đó tải không phải là cách khác arround –

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