Ich habe eine ASP.NET-Webanwendung, die aus mehreren ASP.NET-Projekten (zusätzlich zu mehreren Klassenbibliotheken) besteht. Offensichtlich ist eines der Projekte das Root-Projekt, während der Rest Teilprojekte sind (das detaillierte Konzept dieser Anwendungsstruktur wird erklärt here). Jedes der Sub-/Child-Projekte hat sein eigenes Verzeichnis und alle sitzen in einem Verzeichnis, das ich "Module" im Stammordner genannt habe. Da IIS mit einem Projekt pro Anwendung umgehen kann, werden alle untergeordneten Projekte als reguläre Verzeichnisse (beim Ausführen) behandelt. Daher habe ich den Build-Ausgabepfad für jedes der untergeordneten Projekte in "..\..\bin\
" geändert, was der Stammordner ist. So habe ich alles richtig eingerichtet. Aus Sicht von Visual Studio habe ich den Luxus, verschiedene Projekte unter einer Lösung zu haben. Und aus der IIS-Perspektive habe ich ein Projekt mit einen bin-Ordner und eine Web.Config-Datei. Jetzt kommt es zur Veröffentlichung. Wenn ich das Root-Projekt veröffentliche (indem ich mit der rechten Maustaste auf den Projektknoten klicke -> publish), wird die veröffentlichte Ausgabe dieses Projekt nur ohne den Ordner "Modules" sein. Der resultierende bin-Ordner wird auch die Ausgabe-DLLs der Subprojekte vermissen. Und das wird erwartet. Also dachte ich, dass der offensichtliche Weg, dies zu beheben, darin besteht, alle meine Webprojekte (nicht nur den root) zu veröffentlichen, wobei ich bedenken muss, dass mein Pfad für die Veröffentlichung von Subprojekten der Ordner "Module" im Publishpfad des Rootprojekts sein muss. All das funktionierte großartig, abgesehen von einem wesentlichen Problem. Es stellte sich heraus, dass jedes der veröffentlichten Subprojekte seinen eigenen bin-Ordner hat und folglich der Ordner des Root-Ordners nicht die Output-DLLs der Unterprojekte enthält. Also dachte ich mir, während Visual Studio mir erlaubt, den Ausgabepfad jedes Projekts so zu spezifizieren, wie ich es möchte (wie ich erwähnt habe, setze ich es auf "..\..\bin\
"), die ClickOnce Veröffentlichung respektiert das nicht und erstellt einfach einen bin Ordner für jedes Unterprojekt . Gibt es eine Möglichkeit, den Ausgabepfad (den bin-Ordner) der ClickOnce-Veröffentlichung anzugeben? Wenn nicht, was wäre eine alternative Lösung?Veröffentlichen von Webanwendung mit mehreren Projekten
Antwort
Wie Sie sagten, Sie haben mehrere projects
und man ist das Root-Projekt. So sollte jedes Projekt seinen eigenen bin
Ordner haben, weil es ein project
kein sub folder
von root project
ist.
Wenn sub project
würde keine bin
Ordner haben, wie es wissen würde, von wo aus assemblies
zu laden, die in diesen project
verwendet werden.
Es ist keine schlechte Idee, bin
Ordner für jedes Sub project
zu haben.
Die Antwort here kann Ihr Problem beheben. Durch das Hinzufügen der folgenden Attribute zu Ihrer .csproj
-Datei (aus verknüpften Antwort geändert), können Sie Clickonce, um zusätzliche Inhalte im Ausgabeverzeichnis informieren:
<ItemGroup>
<Content Include="bin\**\*.*" />
</ItemGroup>
Eine andere Antwort here bietet eine Möglichkeit gegeben rekursiv umfassen zusätzliche Inhalte in Ihre die Ausgabe des Projekts, die sich außerhalb Ihres Projektordners befindet, was hier gelten kann; Aus der Perspektive des Root-Projekts befinden sich die anderen Projekte außerhalb des Ordners. Ich bin mir jedoch nicht sicher, ob ClickOnce dies ignoriert oder nicht.
<Content Include="..\..\MyContentFiles\**">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Ich habe keine Chance, Ihre Lösung noch zu testen, aber ich glaube, es ist hilfreich. Ich werde als Antwort markieren, wenn sie funktioniert. Danke, – yazanpro
- 1. TypeLITE mit mehreren Projekten
- 2. Arbeiten mit mehreren Projekten
- 3. Fehler beim Veröffentlichen der Webanwendung
- 4. Einen Komponententest mit mehreren Projekten teilen
- 5. Kontinuierliche Integration mit mehreren Projekten/Sprachen/Umgebungen
- 6. Azure Continuous Deployment mit mehreren Projekten
- 7. Doppelte Funktionalität unter mehreren Projekten
- 8. Erstellen einer BizTalk-Lösungen mit mehreren Projekten
- 9. Einzelne Assembly aus mehreren Projekten
- 10. Erstellen von mehreren Assembly-Projekten mit CoreCLR und dnu
- 11. Installieren von EntityFramework zur Lösung mit mehreren Projekten
- 12. Teilen von Connectionstrings mit mehreren Projekten in derselben Lösung
- 13. Verwenden von log4net in einer Lösung mit mehreren Projekten
- 14. Speichern von Visual Studio-Lösung mit mehreren Projekten in SVN
- 15. Veröffentlichen Sie ein Formular mit mehreren Teilansichten
- 16. Wie kann ich eine Webanwendung mit CruiseControl.NET & MSBuild bereitstellen/veröffentlichen?
- 17. Webanwendung hängt nach mehreren Anfragen
- 18. Ungültige Laufzeit beim Veröffentlichen von Google-App Java-Webanwendung
- 19. Wie teile ich eine Komponente zwischen mehreren Ember-Projekten?
- 20. Gemeinsame Nutzung einer Codebasis zwischen mehreren Projekten
- 21. Gemeinsamer Code zwischen mehreren Asp.Net-Projekten
- 22. Verwendung der gleichen Module in mehreren Projekten
- 23. Verwenden der gleichen Datenbank in mehreren Projekten
- 24. Zusammenarbeiten von Android Studio-Projekten auf mehreren Computern
- 25. Gute Möglichkeit git-Repository von mehreren Projekten der Organisation
- 26. Wie man ein VCS mit mehreren abhängigen Projekten strukturiert
- 27. Best Practices für die Versionskontrolle mit mehreren Projekten
- 28. Multi-Datei Elementvorlage in mehreren Projekten
- 29. Teilen C# Klasse Quellcode zwischen mehreren Projekten
- 30. Wiederverwendung asmx Webservices in mehreren Projekten
Von dem Link ich in der Frage enthalten. Bitte überprüfe diesen Teil hoffentlich, damit mein Fall klarer wird. 'Nachdem Sie die untergeordneten Projekte so konfiguriert haben, dass sie ein gemeinsames Stammverzeichnis der IIS-Anwendung freigeben, können Sie Ressourcen zwischen Projekten in der Lösung freigeben. Sie können z. B. ein Benutzersteuerelement aus einem freigegebenen Ressourcenprojekt in eine ASPX-Datei in einem anderen Projekt ziehen. Beachten Sie, dass dies nur möglich ist, nachdem Sie die Projekte so konfiguriert haben, dass sie einen gemeinsamen IIS-Anwendungsstamm freigeben. Visual StudioNET ermöglicht es Ihnen nicht, Ressourcen zu teilen, wenn sich die Projekte noch in separaten Stammverzeichnissen der IIS-Anwendung befinden. – yazanpro
Aus IIS-Sicht habe ich also nur ein Projekt. Und technisch würden die untergeordneten Projekte ihre Assemblys aus dem Root-Bin-Ordner laden (ich setze explizit den Ausgabepfad aller meiner untergeordneten Projekte auf '.. \ .. \ bin', was der Root-Bin-Ordner ist.) – yazanpro