14

Pracuję nad starszym produktem. Potrzebuję opcjonalnych regionów złożonego interfejsu, opartych na stałych kompilacji. Nie jest możliwe przeniesienie tych regionów do formantów, dlatego używam tagów AlternateContent (mc: AlternateContent).Tagi alternatywnej zawartości powodujące problemy z IDE, ale nie kompilator

Działa to idealnie, podczas kompilacji i aplikacja działa zgodnie z oczekiwaniami.

Jednak IDE twierdzi jeden błąd za każdym AlternateContent oraz zamknięte Wybór znacznika, a nie załaduje okna projektu/podgląd (w VS lub mieszanki):

The name "AlternateContent" does not exist in the namespace "http://schemas.openxmlformats.org/markup-compatibility/2006" 
The name "Choice" does not exist in the namespace "http://schemas.openxmlformats.org/markup-compatibility/2006" 

Próbowałem, odbudowę, sprzątanie i przebudowywanie, zmiana ustawień kompilacji między wersją, debugowaniem, x86, x64 i ponownym uruchomieniem. Nic nie pomaga. Daje takie same błędy w Blend.

Mam nadzieję, że to jest po prostu coś głupiego, co robię i mogę to naprawić; lub ewentualnie nowszy URI przestrzeni nazw, którego powinienem używać. Jeśli nie mogę rozwiązać tych błędów, mam nadzieję, że ktoś zna sztuczkę, która pomija te błędy w IDE, więc może z nich korzystać.

Mam w pełni zaktualizowaną instalację Premium VS2013. Jednak ma usterkę na maszynie testowej z uruchomionym CTP VS14 i innym działającym VS2012 (w pełni zaktualizowanym), oba bez żadnych dodatków; więc muszę założyć, że to nie jest problem z moją instalacją PC.

+0

Czy kiedykolwiek to rozwiązałeś? Też mam ten sam problem na kilku komputerach i staram się znaleźć rozwiązanie .. – abbottdev

+0

Aktualizacja VS2013 3 nadal nie jest w stanie tego obsłużyć - projektant po prostu mówi "nieprawidłowy znacznik" – springy76

+0

@ John Chrześcijanin, czy kiedykolwiek znalazłeś rozwiązanie do tego? – aperl

Odpowiedz

0

Co o tym:

public class BuildConstants 
{ 
    public bool IsDebug 
    { 
     get 
     { 
#if DEBUG 
      return true; 
#else 
      return false; 
#endif 
     } 
    } 
} 

i XAML:

<Application.Resources> 
    <BooleanToVisibilityConverter x:Name="BooleanToVisibilityConverter"></BooleanToVisibilityConverter> 
    <l:BuildConstants x:Key="BuildConstants" /> 
</Application.Resources> 

<Grid Visibility="{Binding IsDebug, Source={StaticResource BuildConstants}, Converter={StaticResource BooleanToVisibilityConverter}}"> 
    <TextBlock Text="This will be visible only when DEBUG build constant is present"></TextBlock> 
</Grid> 
+0

Cała przyczyna użycia AlternateContent polega na tym, że zawartość jest usuwana z XAML, np. jeśli używasz dekompilatora, nie ma możliwości cofnięcia zmiany lub dodania jej z powrotem. Jeśli zrobisz to, co sugerujesz możesz edytować zespół i zmienić flagę IsDebug tak, jak chcesz. – rolls

8

Trochę późno do partii, ale jeśli dodać tag mc do pominięcia atrybut błąd zniknie. Twoje treści nie będą wyświetlane w projektancie, ale pracowały dla mnie, gdy kompilowałem różne smaki mojego projektu.

<UserControl... 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:conditional="defined-in-assembly.cs" 
    mc:Ignorable="d mc"/> 
+0

Pytanie: Czy przeczytałeś coś więcej niż słowo "AlternateContent" z tematu/tytułu lub treści? – springy76

+1

Pewnie. Czy w mojej odpowiedzi przeczytałeś przecinek? Dodając mc do linii mc: Ignorable, IDE nie będzie już narzekać na tagi AlternateContent lub Choice, ponieważ je ignoruje.Jak już powiedziałem, nie będzie to faktycznie pokazywać alternatywnej treści w projektancie, ale kiedy ją skompilujesz i uruchomisz, będzie działało zgodnie z oczekiwaniami (tak jak robi to nawet wtedy, gdy błędy są pokazywane w Visual Studio). Po prostu ignoruje błąd i pozwala przynajmniej zobaczyć i zmodyfikować resztę układu. Nie doskonały, ale działa dla mnie. – Redroy

+0

... i był też czymś, co OP był po> "Jeśli nie potrafię rozwiązać błędów, mam nadzieję, że ktoś zna sztuczkę, aby tłumić te błędy w IDE, więc może z niego korzystać." – Redroy