2012-05-06 19 views
5

Jak uzyskać dostęp do bieżącego kontekstu projektu w niestandardowym zadaniu w MSBuild? Początkowo wydawało się, że odwołanie GlobalProjectCollection na ProjectCollection umożliwi dostęp, ale wydaje się, że jest puste, przynajmniej podczas uruchamiania MSBuild z linii poleceń.Jak uzyskać dostęp do bieżącego kontekstu projektu w niestandardowym zadaniu?

mogę obecnie dostać nową instancję projektu w oparciu off bieżącego pliku projektu w następujący sposób:

List projectAssemblies = new List(); 
using (XmlReader projectFileReader = 
    XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode)) 
{ 
    Project project = new Project(projectFileReader); 
    foreach (ProjectItem item in project.AllEvaluatedItems) 
    { 
     ... woo hoo ... 
    } 
} 

ale po prostu wydaje się dużo kłopotów. Jak mogę uzyskać dostęp do projektu, z którego wywoływane jest moje zadanie?

Odpowiedz

5

Nie możesz. MSBuild został specjalnie zaprojektowany, aby poszczególne zadania miały tylko dostęp do parametrów, które jawnie przekazałeś do zadania, i nic więcej. To sprawia, że ​​pliki MSBuild są łatwiejsze do odczytania, teraz, gdy wiesz, że każde zadanie jest zależne tylko od tego, co zostało spekulowane, kiedy wywołasz to zadanie.

Twój kod nie tworzy kopii projektu, tworzy nową instancję, więc nie powinieneś oczekiwać, że właściwości będą takie same. Na przykład instancja aktualnie wykonywanego projektu (z którego wywołane jest twoje zadanie) może mieć właściwości przesłonięte z wiersza poleceń lub zmienione w trakcie budowy twojego projektu, podczas gdy nowo utworzony projekt będzie miał domyślne wartości właściwości po pierwszym Silnik MSBuild przechodzi przez plik.

+1

Masz rację. Nawet zadanie zawiera odwołania do projektu kontenera, zamiast odwoływania się do jakiegoś obiektu nadrzędnego od wewnątrz. Jako że właśnie to próbuję obecnie odwołać, postaram się wyprowadzać odniesienia w podobny sposób do tego podstawowego zadania. – bojolais

+0

Co z globalnymi właściwościami? Czy można uzyskać do nich dostęp w ramach zadania? – Irek

Powiązane problemy