2012-01-03 13 views
6

Özet:Proje dosyalarında <ProjectReference> ne zaman kullanılır?

Projeler # projeleri görsel stüdyo ile yanlış sırada kurmak ve C++ ve C yönetilen

Açıklama:

Ben kuruyor büyük (100+ proje) çözümü dosyası var Bir kaç proje yanlış sırada. Çözelti dosya projelerinin aşağıdaki türde içerir:

  • doğal C/C++
  • yönetilen C++
  • yönetilen C#

çözüm projelerinin farklı türleri arasında tüm uygun bağımlılıkları içerir. Tamam, komut satırından (MSBuild kullanarak) oluşturduğumda bir sorun var. Yönetilen projelerin bağımlılıkları (hem C++ hem de C#) yanlış sırayla oluşturulur. Örneğin, yönetilen bir bağımlılık eksik olduğu için bir proje yapılamaz.

#using <foo.dll> 

Foo.dll henüz varolmadığı: Mesela bir yönetilen C++ dosya başarısız olur bir kullanarak beyanı olacaktır.

Bu, foo.dll dosyasının daha önce oluşturulmuş olması gerektiği anlamına gelir, ancak değil. Daha önce bahsettiğim gibi, bağımlılıklar çözüm dosyasında uygun şekilde ayarlanmıştır. foo Baz bağlıdır Örneğin, ben

Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}" 
    ProjectSection(ProjectDependencies) = postProject 
     ... 
     {2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3} 
    EndProjectSection 
EndProject 
... 
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}" 
    ProjectSection(ProjectDependencies) = postProject 
     ... 
    EndProjectSection 
EndProject 

Yani çözüm dosyası doğru bağımlılığı var ... çözüm dosyasında bu var. Ancak Foo.vcxproj projesindeki bağımlılık sadece #using yönergesiyle ifade edilir. Visual studio blogunda msbuild projelerini sipariş etmede bilinen bir hata olduğunu okudum. etrafında http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx

Onların çalışmaları bu gibi benim projelerine denilen bir madde eklemektir:

<ProjectReference Include="... foo.csproj"> 
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly> 
</ProjectReference> 

Neyse, benim sorum: Ben SADECE Yönetilen C++ projeler için bunu yapmak gerekir? Yoksa bunu Yönetilen C++ VE C# projeleri için mi yapıyorum? (Bağımlılıkları açık olduğundan bu yana C# projeleri için bunu yapmaya gerek duymuyorum)

Not: Bunu yapmamdaki tüm projelere koymaya çalıştım ve çok sıcak çalışmadı. Yerel projelerimde çok fazla garip derleme hatası var gibi ...

Buna herhangi bir yanıt için teşekkürler.

cevap

4

Aynı sorunu yaşadım, ancak yalnızca C# projeleriyle. MsBuild çözüm dosyası bağımlılıkları kullanmıyor gibi görünüyor. Oluşturma sırası oluşturmak için proje dosyalarının içinde proje referansları kullanıyor. Doğru yapı siparişini almak için tüm ProjectReferences'ınızı güncellemeye çalışın. Durumunuzda, C++ proje dosyanıza yönetilen proje başvurusu (bağımlılık) eklemeniz gerekir.

Sorunuzun yanıtı şöyledir: Evet, hem Yönetilen C++ VE C# projeleri için yapmanız gerekir.MSBuild ile oluşturuyorsanız sln dosyasındaki bağımlılıkları ayarlamak yeterli olmaz.

+0

Yerel kitaplığa bağlanmak için ProjectReference Öğesi eklerseniz, MSBuild komut dosyalarının derinliklerinde hatalar oluşturduğumu buldum. Bu yüzden tüm Yönetilen C++ projelerim için ProjectReference, Diğer .csproj dosyalarına eklemeye başladım. Şimdi bunları .csproj dosyalarına ekleyeceğim ve nasıl gittiğini göreceğim. –

İlgili konular