2010-01-19 7 views
5

Grałem z VS2010 beta2. Zauważyłem, że jeśli spróbuję dodać System.Core.dll do projektu, który nie ma już odniesienia do tego, w VS2010, to narzeka, mówiąc, że nie mogę dodać tego zespołu, ponieważ jest już przywoływany przez system projektu. Każdy pomysł, dlaczego robią to w VS2010/4.0? Czy to dlatego, że przekazali kilka typów do mscorlib z System.Core?System.Core.dll w 4.0 dodanym domyślnie?

+0

Dziękuję za to pytanie , próbowaliśmy .Net4 z vs2010, ale nasze rozwiązanie miało zbyt dużo bagażu, który nie działałby, więc wróciliśmy do 3.5. Po zgłoszonym błędzie znalazłem obejście, dzięki któremu mogłem dodać odniesienie do System.Core z powrotem do projektu, który nie byłby bez niego budowany. –

+0

Naprzeciwko tego samego problemu w VS2012 podczas przenoszenia projektu SL4 do SL5. –

Odpowiedz

3

System.Core jest częścią wymaganego frameworka od wersji 3.5, ponieważ zawiera rzeczy takie jak ExtensionAttribute i LINQ Standard Query Operators. Podobnie, jeśli utworzysz projekt 3.5 w VS2008, automatycznie doda on dla Ciebie odniesienie do System.Core.

+0

Wiem, że domyślnie dodaje odniesienie do System.Core, nawet w 3.5. Ale różnica polega na tym, że jeśli usuniesz to odwołanie z System.Core z projektu, a potem spróbujesz je dodać, będzie to oznaczać, że zestaw jest już w projekcie. Tak się nie dzieje w 3.5. – Niranjan

+0

To brzmi jak błąd: albo nie powinien pozwolić ci usunąć tego wymaganego odniesienia, albo powinien pozwolić ci go dodać, jeśli usuniesz odniesienie. Może być wart raportowania w Connect. – itowlson

+3

Zgłoszony błąd: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=525663 – Niranjan

5

Brak odpowiedzi dla "dlaczego to robią", ale może być pomocny.

ten sposób widzę łańcuch działań, które prowadzą do niejawny przedstawieniu System.Core.dll:

  • dokonaniu projekt w Visual Studio 2010. Generuje .csproj z ToolsVersion=4.0. Załóżmy, że użyje MSBuild z .NET 4.
  • Twój .csproj importuje Microsoft.CSharp.targets z $(MSBuildBinPath). Chyba będzie c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
  • Microsoft.CSharp.targets import Microsoft.Common.targets
  • w .NET 4, Microsoft.Common.targets importu Microsoft.NETFramework.props
  • W Microsoft.NETFramework.props można znaleźć AdditionalExplicitAssemblyReferences węzeł, który ma średnik - rozdzielona lista zespołów. Znalazłem tam System.Core.dll i zmienną do późniejszej wymiany.

Tak, aby wyłączyć dorozumianego odniesienia z System.Core.dll, można usunąć go z listy w AdditionalExplicitAssemblyReferences węzła w c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props.

Po tym, jeśli używasz na przykład System.Linq i nie mają żadnego odniesienia do System.Core.dll w projekcie, można logicznie się skompilować błąd, podobnie jak w Visual Studio 2008.

Powiązane problemy