आप Roslyn.Services.Workspace.LoadSolution
का उपयोग करके समाधान लोड कर सकते हैं। एक बार ऐसा करने के बाद, आपको प्रोजेक्ट के लिए प्रत्येक परियोजना के माध्यम से जाना होगा, परियोजना के लिए Compilation
प्राप्त करें और उस पर Emit
पर कॉल करें।
आप नीचे दिए गए कोड के साथ निर्भरता क्रम में संकलन प्राप्त कर सकते हैं। (हाँ, मुझे पता है कि IHaveWorkspaceServices को कास्ट करना है। यह अगले सार्वजनिक रिलीज में बेहतर होगा, मैं वादा करता हूं)।
using Roslyn.Services;
using Roslyn.Services.Host;
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
static void Main(string[] args)
{
var solution = Solution.Create(SolutionId.CreateNewId()).AddCSharpProject("Foo", "Foo").Solution;
var workspaceServices = (IHaveWorkspaceServices)solution;
var projectDependencyService = workspaceServices.WorkspaceServices.GetService<IProjectDependencyService>();
var assemblies = new List<Stream>();
foreach (var projectId in projectDependencyService.GetDependencyGraph(solution).GetTopologicallySortedProjects())
{
using (var stream = new MemoryStream())
{
solution.GetProject(projectId).GetCompilation().Emit(stream);
assemblies.Add(stream);
}
}
}
}
Note1: LoadSolution
अभी भी कवर .csproj फ़ाइलों को पार्स और फ़ाइलों/संदर्भ/संकलक विकल्पों का निर्धारण करने के लिए के तहत उपयोग MSBuild करता है।
नोट 2: जैसा कि रोज़लिन अभी तक भाषा पूरी नहीं है, वहां ऐसी परियोजनाएं होंगी जो आप प्रयास करते समय सफलतापूर्वक संकलित नहीं करते हैं।
स्रोत
2013-01-26 06:40:52
वहाँ निर्भरता आदेश ('sln.ProjectsInDependencyOrder' की तरह) का निर्धारण करने का एक सुविधाजनक तरीका है या मैं अपने दम पर लागू करने के लिए होगा यह कुछ है? (उदाहरण के लिए प्रोजेक्ट-रेफरेंस के माध्यम से जाना और एक निर्भरता पेड़ बनाना) – NobodysNightmare
एक आईप्रोजेक्ट निर्भरता सेवा है जिसमें GetTopologicallySortedProjects() है। मेरे पास कंप्यूटर को आसानी से जांचने के लिए आसान नहीं है, लेकिन इसे बाद में अपडेट किया जाएगा। –
कुछ कोड जोड़ने के लिए उत्तर संपादित किया गया। –