2014-12-22 17 views
8

Mam sln z> 50 projektami, a ostatnio, kiedy przeniosłem się do VS2013, za każdym razem, gdy wciskam F5 dla kompilacji, odbuduj wszystkie projekty, mimo że właśnie wykonałem kompilację. Diagnostyka pokazać, że każdy projekt jest oznaczone jako nieaktualne z powodu następującego błędu:Projekt <NAZWA PROJEKTU> nie jest aktualny. Brakujący plik wejściowy "netframework, version = v4.0, profile = client.assemblyattributes.cs

Project <PROJECT NAME> is not up to date. Missing input file 'c:\users\USER\appdata\local\temp\2\.netframework,version=v4.0,profile=client.assemblyattributes.cs 

przeczytałem te wątki:

ale sugestią jest dodanie następujących elementów ng wiersz do pliku proj:

<Target Name="GenerateTargetFrameworkMonikerAttribute" /> 

Zrobiłem to i nie zadziałało. Wyłączenie ostrzeżenia jako sugestii MS również nie zadziała, ponieważ projekt pozostanie "nieaktualny".

Używam projektów VS2013, C# i VB. W przypadku tego samego projektu i VS2012 taki błąd nie jest zgłaszany, a projekty są aktualne.

Wszelkie sugestie?

UPDATE Być może warto wspomnieć, że mam kilka definicji budować w roztworze, w którym wszystkie projekty budują dla AnyCPU wyjątkiem jednego: http://screencast.com/t/fuw9k4IubN

+0

2 Pytania, czy wszystkie projekty są skonfigurowane w taki sposób, aby zawierały ustawienia menedżera konfiguracji (R Click rozwiązanie-> Menedżer konfiguracji)? i czy korzystasz z plików lib lub DLL innych firm, które zostały skompilowane w poprzedniej wersji .NET? i przez stronę trzecią mam na myśli wszystkie biblioteki, które nie są kompilowane w twoim rozwiązaniu, nawet jeśli pochodzą z innych projektów w twojej firmie? Miałem ten sam problem jakiś czas temu i okazało się, że sprawcą była statyczna biblioteka, z której korzystaliśmy, która została skompilowana w poprzedniej wersji VS. –

+0

1. Tak, wszystkie projekty są skonfigurowane do budowy. 2. Nie sądzę, że mam zewnętrzne biblioteki, które nie są budowane w projekcie. – checho

Odpowiedz

3
<Target Name="GenerateTargetFrameworkMonikerAttribute" /> 

No nie, to dobry pomysł, który stanowi przeciwieństwo problemu, który próbujesz rozwiązać. Zmusza MSBuild do utworzenia pliku AssemblyAttributes.cs, nieuchronnie twój projekt musi zostać przebudowany, ponieważ plik jest nowy. Znalezione Q + A odnosi się do zupełnie innego problemu, , byli to programiści C++, którzy próbowali uporać się z nowym ostrzeżeniem dla łącznika w VS2010. Nienawidzą ostrzeżeń, które pojawiają się znikąd z plików, które nie są częścią ich projektu. Cóż, nie wszyscy. Zaznaczony odpowiedź na to pytanie jest dość SO zło btw, że inny facet pisał znacznie lepszą odpowiedź :)

Missing input file 'c:\users\USER\appdata\local\temp\2\.netframework... 

Jest to sygnał w tym komunikacie zauważyć obecność podkatalogu \2 w tym nazwy ścieżki. To jest duża czerwona flaga, to jest normalna, to jest , a nie. Ten automatycznie generowany plik .cs zwykle znajduje się w katalogu TEMP, a nie w podkatalogu tego folderu. Z pewnością ma to coś wspólnego z twoim prawdziwym problemem.

MSBuild nie robi nic specjalnego i po prostu używa System.IO.Path.GetTempPath() do generowania nazwy folderu. Ta metoda również nie jest specjalna, po prostu przekazuje ją do funkcji winapi GetTempPath(). Dlatego diagnostyka polega na tym, że na tej maszynie budującej ta funkcja systemu operacyjnego czasami generuje nieparzystą ścieżkę, wybierając podkatalog folderu TEMP. I nie zawsze generuje to samo, co powoduje, że twoje projekty są odbudowywane.

Istnieje co najmniej jedna dobra teoria do tego zachowania, wspomniane przez commenter @Darran Rowe do this blog post:

No, this is Terminal Services at work. When you log in over remote desktop, Windows will set the temp directory for the logon session to %LOCALAPPDATA%\Temp\<session id>

Rings dzwon?

+0

Dziękuję za twój wkład. Uważam, że ten post jest przydatny, a więc mój awans. Jestem przekonany, że przetestowałem tę flagę wcześniej i nie zadziałało. Pracowałem w VS2015 Enterprise, a teraz jestem z Professional, co jest jedyną różnicą, o której mogę pomyśleć, ale to nie powinno mieć znaczenia. Nie wiem, dlaczego dzisiaj zadziałało. Na pytanie dotyczące usług terminalowych dość często loguję się do mojego komputera zdalnie, a czasami buduję to konkretne rozwiązanie, więc może to być powód, ale rozwiązanie proponowane na tej stronie do odtworzenia usuniętego folderu nie pomogło. – checho

+0

"Często zdarza się, że loguję się na mój komputer" to wyjaśnienie typu slamdunk. Wygląda jednak na to, że brakuje ci punktu, efektem ubocznym używania Pulpitu zdalnego jest to, że jest całkowicie * normalny *, aby całe rozwiązanie zostało przebudowane. Ponieważ katalog TEMP nie jest taki sam. Taka sytuacja może się zdarzyć za każdym razem, gdy ponownie się połączysz, ponieważ otrzymasz inny identyfikator sesji na hoście. Hacky obejście to uruchomienie wiersza polecenia, zastąpienie zmiennej środowiskowej TEMP i uruchomienie devenv.exe. Niebezpieczny, ponieważ może zakłócać pracę innych osób podłączonych do urządzenia. –

+0

Z tego co zrozumiałem, katalog TEMP różni się tylko podczas sesji zdalnej. Tak więc, jeśli kiedykolwiek używałbym projektu podczas sesji zdalnej, ponieważ używa on subdir dla sesji, projekt będzie ciągle przebudowywany. Jednak gdy jestem lokalnie na komputerze, katalog TEMP jest poprawny, więc jeśli uruchomię projekt z mojego komputera, nie powinien on ingerować w podfolder w TEMP, ale powinien używać właściwego, ale nie . Nie pomogło również ręczne utworzenie folderu \ 1. – checho