.NET'te bir kurulum projem var. Projeyi ve diğer projeleri altüst etmek için kaydettiğimde, kurulum projesi artık derlenmiyor. "Projenin bağımlılıkları güncellenemiyor" hatasını alıyorum.
.NET'te bir kurulum projem var. Projeyi ve diğer projeleri altüst etmek için kaydettiğimde, kurulum projesi artık derlenmiyor. "Projenin bağımlılıkları güncellenemiyor" hatasını alıyorum.
Yanıtlar:
MSDN'de bununla ilgili uzun bir tartışma dizisi var. Pek çok olası neden var gibi görünüyor. Tartışma, bu sorun için Microsoft'tan birkaç bağlantı içerir. İşte VS2005 için bir düzeltme ve işte VS2010 için bir geçici çözüm .
VS2010'u kapatmak ve ardından yeniden açmak benim için her zaman çalıştı :)
Aynı sorunu yaşadım, ancak bahsedilen çözümlerin hiçbiri benim için işe yaramadı. Kurulum projesini yeniden inşa etmek işe yarayacak, ancak 30'dan fazla projenin proje çıktılarını dahil ettiğimiz için bu bir acı.
Çalışmak için bulduğum şey, @ Marc'ın yaptığına çok benzer bir yaklaşım.
Her durumda, aynı dll'ye birden fazla başvurum vardı (bunun nasıl olduğundan emin değilim)
Doğru referans örneği:
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_11EC89A306FFB83A269ACC2BF8D8462B"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Some.OrOther.Lib, Version=1.601.4042.16978, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_11EC89A306FFB83A269ACC2BF8D8462B"
{
"Name" = "8:Some.OrOther.Lib.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Some.OrOther.Lib.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_79891234C744498C83755DDEA682F0BF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
Yanlış referans örneği:
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_11EC89A306FFB83A269ACC2BF8D8462B"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Some.OrOther.Lib, Version=1.601.4042.16978, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
}
"SourcePath" = "8:Some.OrOther.Lib.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_79891234C744498C83755DDEA682F0BF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
Ayrıca, @Marc'ın aldığı "İki veya daha fazla nesne aynı hedef konuma sahip ('[targetdir] \ MyAssembly.dll')" uyarısını aldım ... ancak kurulum projesi derleniyor ve sorunsuz çalışıyor.
File
montaj referanslarını sildim. Mükemmel çalıştı.
VS2010 için doğru düzeltme bağlantısı:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681
Kurulumdan sonra iyi çalışıyor
Benzer sorunu yaşadım ve MSDN hakkındaki bu çok uzun ve eski tartışmada bir düzeltme buldum .
26 Ağustos 2010 Perşembe 17:51 'Jeff Hunsaker' kullanıcısı yanıtladığı gibi (doğrudan bağlantı mümkün değil):
Visual Studio 2008 Dağıtım Projelerini VS 2010'a yükseltirken bununla karşılaştım. Hans'ın (yukarıdaki) çözümü benim için çalıştı.
- .Vdproj dosyasını Not Defteri'nde düzenleyin.
- "SourcePath" = "8'i arayın:
- Her derleme / dll için tam yolu sağlayın
- Dosyayı kaydet
.Vdproj dosyamda, yalnızca derlemeye başvuran birkaç girdi vardı:
"SourcePath" = "8: MyAssembly.DLL"Visual Studio [bir şekilde] dosya konumunu bilmesine rağmen, tam yolu sağlayana kadar "Projenin bağımlılıkları güncellenemiyor" hatasını aldım:
"SourcePath" = "8: .. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL"
Saygılarımızla,
Jeff ...
Visual Studio tarafından hangi bağımlılıkların rapor edildiğini not ettim ve gerekli olması durumunda bunları düzeltmek için bir betik yazdım.
Bunun artık bana bir uyarı verdiğini unutmayın "İki veya daha fazla nesne aynı hedef konuma sahip ('[targetdir] \ MyAssembly.dll'). Ama bununla yaşayabilirim.
Bu benim için aynı sorunu çözdü: Hata mesajında belirtilen derlemeleri GAC'ye ekledim. Projeyi yeniden derlediğimde dll'ler Çözüm Gezgini'nde "Algılanan Bağımlılıklar" altında göründü ve aynı hatayı aldım. Sonra dll'leri dışarıda bıraktım (sağ tıklayın ve Hariç Tut'u seçin) ve proje sonunda tamamlandı.
Sorun, .vdproj dosyasının "Dağıtılabilir" -> "Dosya" bölümündeki artık dosyalardan kaynaklanıyor olabilir. Bunu, Visual Studio'daki kurulum projesinden tüm dosyaları kaldırarak doğrulayabilirsiniz (önce bir yedekleme yapın). .Vdproj dosyasını bir metin düzenleyiciyle açarsanız ve yine de "Dosya" bölümünde girişler görürseniz bu sorunu yaşarsınız. Bu dosyaların anahtarlarını not edebilir ve orijinal .vdproj dosyasından kaldırabilirsiniz ve yeniden çalışması gerekir.
Alternatif olarak bu hızlı düzeltme programını derleyin (yalnızca Visual Studio 2010 ile test edilmiştir):
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
class Program {
static void Main(string[] args) {
try {
if (args.Length == 0) {
Console.WriteLine("FixVDProj <path to .vdproj file>");
return;
}
if (!File.Exists(args[0])) {
throw new Exception("File " + args[0] + " does not exist!");
}
string[] strarSource = File.ReadAllLines(args[0]);
List<string> listDest = new List<string>();
List<string> listKnownKeys = new List<string>();
int iSection = 0;
bool bAccept = true;
bool bNeedFix = false;
foreach (string strLine in strarSource) {
switch (iSection) {
case 0:
if (strLine.Trim() == "\"DeployProject\"") {
listDest.Add(strLine);
iSection++;
} else {
throw new Exception("\"DeployProject\" not found");
}
break;
case 1:
if (strLine.Trim() == "\"Hierarchy\"") {
iSection++;
}
listDest.Add(strLine);
break;
case 2:
if (strLine.Trim().StartsWith("\"MsmKey\" = ")) {
int p = strLine.IndexOf('=');
string strMsm = strLine.Substring(p + 1).Trim();
if (strMsm.StartsWith("\"8:") && strMsm.EndsWith("\"")) {
listKnownKeys.Add(strMsm.Substring(3, strMsm.Length - 4));
} else {
throw new Exception("Invalid MsmKey " + strMsm);
}
} else if (strLine.Trim() == "\"Deployable\"") {
iSection++;
}
listDest.Add(strLine);
break;
case 3:
if (strLine.Trim() == "\"File\"") {
iSection++;
}
listDest.Add(strLine);
break;
case 4:
if (strLine.Trim() == "{") {
iSection++;
}
listDest.Add(strLine);
break;
case 5:
if (strLine.Trim() == "}") {
listDest.Add(strLine);
iSection = -1; // finished
} else if (strLine.Trim().StartsWith("\"") && strLine.Contains(':')) {
int p = strLine.IndexOf(':');
string strKey = strLine.Substring(p + 1, strLine.Length - p - 2);
if (listKnownKeys.Contains(strKey)) {
Console.WriteLine("Accepted key " + strKey);
bAccept = true;
listDest.Add(strLine);
} else {
Console.WriteLine("Invalid key " + strKey + " removed");
bAccept = false;
bNeedFix = true;
}
} else if (strLine.Trim() == "{") {
if (bAccept) {
listDest.Add(strLine);
}
iSection++;
} else {
listDest.Add(strLine);
}
break;
case 6:
case 7:
case 8:
case 9:
if (strLine.Trim() == "{") {
iSection++;
} else if (strLine.Trim() == "}") {
iSection--;
}
if (bAccept) {
listDest.Add(strLine);
}
break;
case 10:
throw new Exception("File structure depth exceeded!");
default:
listDest.Add(strLine);
break;
}
}
if (bNeedFix) {
File.Copy(args[0], args[0] + ".bak", true);
File.WriteAllLines(args[0], listDest);
Console.WriteLine("File " + args[0] + " has been fixed!");
} else {
Console.WriteLine("File " + args[0] + " did not need fix!");
}
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
}
VS2010'u yeniden başlatmak benim için işe yaramadı, ancak bir 'Temiz Çözüm', ardından bir 'Çözüm Oluşturma' yaparak her şeyin çalışmasını sağlamayı başardım. Ancak temizlikten sonra 'Çözümü Yeniden Oluştur' denenmesi işe yaramadı. Sonra Çözümü normal olarak F5 ile çalıştırabilirim.
Bu hatayı aldığımda VS2010 dağıtım projemin (.vdproj) 'bozuk' olduğunu görüyorum. Özellikle, VDPROJ dosyasının FILE bölümündeki öğeler , VDPROJ dosyasının HIERARCHY bölümünde eksik olan GUID'lere sahiptir. Bu, aşağıda ayrıntılı olarak açıklanmaktadır.
1) VS2010 dağıtım projeleri aşağıdaki bölümleri içerir:
"Hierarchy"
{
}
"Deployable"
{
"File"
{
}
}
2) HIERARCHY bölümü, dağıtım projesine eklenen her öğe (örn. Dosya) için GUID'leri içerir. Ek olarak, projeye eklenen her dosya DEPLOYABLE> DOSYA bölümünde bir öğe olarak görünür . Aşağıdaki örnekte msimg32.dll dosyası için normal bir yapılandırma gösterilmektedir . HIERARCHY ve DOSYA bölümlerinde eşleşen GUID'e (yani _1C15DB39774F7E79C84F1CC87ECFD60A) dikkat edin .
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
"OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
"MsmSig" = "8:_UNDEFINED"
}
}
"Deployable"
{
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
}
}
3) VS2010 dağıtım projelerim iki şekilde bozulabilir:
a) DOSYA bölümündeki bir öğe çoğaltılır ve çoğaltılan öğeye HIERARCHY bölümünde görünmeyen bir GUID verilir .
b) DOSYA bölümündeki bir öğeyle ilişkili GUID , HIERARCHY bölümünden kaldırılmıştır (yani, DOSYA bölümündeki öğe artık kalmıştır).
3a) İlk problem örneği - DOSYA bölümünde yinelenen öğe :
Bu örnekte, msimg32.dll dosyasının DOSYA bölümünde iki girişi vardır . İlk (yani doğru) girişin HIERARCHY bölümünde eşleşen bir GUID (yani _1C15DB39774F7E79C84F1CC87ECFD60A) vardır , ancak ikinci (yani hata) giriş için GUID (yani 2DDC4FA12BFD46DEAED0053D23331348) HIERARCHY bölümünde görünmez .
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
"OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
"MsmSig" = "8:_UNDEFINED"
}
}
"Deployable"
{
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2DDC4FA12BFD46DEAED0053D23331348"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
}
}
3b) İkinci problem örneği - DOSYA bölümündeki sahipsiz öğe :
Bu örnekte, msimg32.dll dosyasının DOSYA bölümünde bir girişi vardır . Ancak bu girişle ilişkili GUID (yani A515046ADA6244F2A260E67625E4398F) HIERARCHY bölümünde eşleşen bir girişe sahip değil (yani eksik) .
"Hierarchy"
{
}
"Deployable"
{
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A515046ADA6244F2A260E67625E4398F"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
}
}
4) Çözüm: Yukarıda gösterilen her iki sorun için de çözüm, DOSYA bölümündeki sahipsiz öğeyi silmektir .
Aşağıdaki örnek, msimg32.dll için ikinci giriş silindikten sonra yukarıdaki 3a noktasındaki FILE bölümünün nasıl görüneceğini gösterir .
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
"OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
"MsmSig" = "8:_UNDEFINED"
}
}
"Deployable"
{
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
}
}
5) VDPROJ'daki bozuk girişlerin yalnızca şunlar için oluştuğunu buldum:
İşte işe yarayan birkaç çözüm:
1) Sorunlu DLL'lerden birini kurulum projesinden kaldırmak ve ardından yalnızca birini yeniden eklemek sorunu benim için çözdü. Sorunlu birçok DLL varken bile bu işe yaradı. Bunlardan yalnızca birini kaldırıp eklemek VS2010'u bir şekilde düzeltmek için tetikledi.
2) Çözümü yeniden oluşturun, ardından bağımlılıkları tekrar güncellemeyi deneyin. Yeniden oluşturma, görsel stüdyonun bağımlılıkların ne olduğunu keşfetmesine yardımcı olur, çünkü hiçbir şey inşa edilmeden bağımlılıkları bulmakta zorlanıyor olabilir.
3) Visual Studio'yu yeniden başlatın
Yukarıda bağlantılı VS2010 düzeltmesi benim için çalışmadı. Bazen VS2010'u yeniden başlatmak sorunu çözer ve bu işe yaramadığında yukarıdakileri yapmak işe yarar.