2013-01-31 16 views
7

Mam problem z projektem TFS Build. Podążam za przykładem z here, jeśli chodzi o konfigurację projektu w VS.Problemy z wieloma szablonami kompilacji (pliki xaml) w projekcie

Mam projekt tylko dla niestandardowych działań i osobny projekt dla tylko szablonów. Mam problem polegający na tym, że projekt Templates może zawierać tylko jeden plik xaml. Jeśli go skopiuję i wkleję w tym samym projekcie, nie zostanie on skompilowany. Pojawia się następujący błąd:

Błąd 102 Element "obj \ Debug \ TfsBuild_Process_BeforeInitializeComponentHelper.txt" został określony więcej niż jeden raz w parametrze "Zasoby". Zduplikowane elementy nie są obsługiwane przez parametr "Zasoby".

Ale jeśli ją usuniemy, wszystko będzie dobrze. Wszystko działa, co oznacza, że ​​zostanie zbudowane, jeśli ustawię kolejkę w kolejce.

Próbowałem również rozwiązania sugerowanego na here, ale nie wydaje się, aby rozwiązać mój problem.

Solution:

Renaming the form name in the solution explorer.

Change the class name in the .cs and Designer.cs file.

Change the constructor and destructor name (which is same as class name)

Change the name space name (if needed).

Here jest link do pobrania projekt.

Nie mogę zrozumieć dlaczego. Każda pomoc jest bardzo cenna!

+0

uwzględniając dokładnie ten sam problem, szczęścia z tym? –

Odpowiedz

8

Nie wiem, czy nadal masz ten problem, ale też miałem dzisiaj problem. Znalazłem rozwiązanie, które (jeśli nadal napotykasz problem) może ci pomóc lub innym.

Podczas kopiowania szablonu procesu budowania automatycznie otrzymuje właściwość x: Class ustawioną na TfsBuild.Process. Gdy masz wiele szablonów procesów o tej samej wartości, otrzymasz ten błąd podczas budowania projektu.

<Activity mc:Ignorable="sads sap sap2010" x:Class="TfsBuild.Process" this:Process.BuildNumberFormat="$(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)" this:Process.AgentSettings="[New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly}]" this:Process.Verbosity="[Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal]" this:Process.OutputFullHistory="True" this:Process.OutputBranchOrigin="True" this:Process.OnlyOutputChangedFiles="True" this:Process.StartChangeset="0"...... 

I rozwiązać problem poprzez zastąpienie TfsBuild.Process z inną nazwą dla każdego szablonu (np. TfsBuild.ProcessLabDefault). Pamiętaj, że powinieneś również zmienić wszystkie instancje w następujący sposób: Proces, ponieważ oba są połączone razem (np. to: ProcessLabDefault).

<Activity mc:Ignorable="sads sap sap2010" x:Class="TfsBuild.MyProcess" this:MyProcess.BuildNumberFormat="$(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)" this:MyProcess.AgentSettings="[New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly}]" this:MyProcess.Verbosity="[Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal]" this:MyProcess.OutputFullHistory="True" this:MyProcess.OutputBranchOrigin="True" this:MyProcess.OnlyOutputChangedFiles="True" this:MyProcess.StartChangeset="0"...... 

nie znaleźć sposób, aby to zmienić za pomocą interfejsu, widok Kod & Znajdowanie i zamienianie prace. Mam nadzieję, że to pomoże.

0

Wpadłem na ten problem i chciałem dodać rozwiązanie, które znalazłem. Jeśli zaznaczysz właściwości plików XAML, po powiązaniu ich z projektem otrzymają funkcję BuildAction of XamlAppDef. Zmiana tego na "Treść" rozwiąże błąd.

Aby znaleźć ekran właściwości, który chcesz edytować, po prostu zaznacz plik XAML w oknie Solution Explorer i naciśnij F4 lub kliknij plik prawym przyciskiem myszy i wybierz "Właściwości" z menu kontekstowego.

Mam nadzieję, że to pomoże.

+1

Jednak spowoduje to usunięcie sprawdzania typu w przepływie pracy. Nie polecałbym tego, jeśli chce się, aby ich niestandardowe szablony były stabilne. – harlam357

5

Użyłem następującego podejścia i działało bardzo dobrze. Wszystko, co trzeba wymienić, to TfsBuild w dwóch lokalizacjach w pierwszym wierszu surowego xaml.

http://social.msdn.microsoft.com/Forums/vstudio/en-US/d3fb6b89-b711-4a02-a10a-a88a0cb4f714/unable-to-add-more-than-one-templatexaml-into-activity-library-workflow-project?forum=tfsprocess

Z linkiem:

1 Kliknij prawym przyciskiem myszy swoją kopię DefaultTemplate.xaml w kontrola źródła i wybierz widok z ..., aby otworzyć go w Notatniku (można również kliknąć prawym przyciskiem myszy szablon w VS i wybierz "Wyświetl kod").

2 Następnie w pierwszej zmianie linia:

  1. **x:Class="TfsBuild.Process"** do **x:Class="YourProcessTemplateName.Process"**
  2. **xmlns:this="clr-namespace:TfsBuild"** do **xmlns:this="clr-namespace:YourProcessTemplateName"**
+0

To jest lepsze niż odpowiedź IIMII (aktualnie na górze), ponieważ wymaga to tylko dwóch zmian w pliku. – DonBecker

+0

Zdecydowanie lepiej. – mark