Jak zbudować rozwiązanie programowo w C#?
Jak programowo zbudować rozwiązanie C#? Powinienem być w stanie przejść ścieżkę rozwiązania i uzyskać komunikaty wyjściowe ( lub po prostu zbudować rozwiązanie ) jak to osiągnąć w C#?
7 answers
Większość z was zapewnia sposoby, aby to zrobić, wywołując zewnętrzne polecenia, ale jest API, Microsoft.Buduj.Framework , do budowania za pomocą C #
Kod Z Bloga:
using Microsoft.Build.BuildEngine;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
public class SolutionBuilder
{
BasicFileLogger b;
public SolutionBuilder() { }
[STAThread]
public string Compile(string solution_name,string logfile)
{
b = new BasicFileLogger();
b.Parameters = logfile;
b.register();
Microsoft.Build.BuildEngine.Engine.GlobalEngine.BuildEnabled = true;
Project p = new Project (Microsoft.Build.BuildEngine.Engine.GlobalEngine);
p.BuildEnabled = true;
p.Load(solution_name);
p.Build();
string output = b.getLogoutput();
output += “nt” + b.Warningcount + ” Warnings. “;
output += “nt” + b.Errorcount + ” Errors. “;
b.Shutdown();
return output;
}
}
//The above class is used and compilation is initiated by the following code,
static void Main(string[] args)
{
SolutionBuilder builder = new SolutionBuilder();
string output = builder.Compile(@”G:CodesTestingTesting2web1.sln”, @”G:CodesTestingTesting2build_log.txt”);
Console.WriteLine(output);
Console.ReadKey();
}
Zauważ, że kod na tym blogu działa, ale jest trochę przestarzały
Microsoft.Build.BuildEngine
Został podzielony na kilka kawałków
Microsoft.Build.Construction
Microsoft.Build.Evaluation
Microsoft.Build.Execution
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-22 18:22:57
Zobacz ten link, aby zobaczyć przykład korzystania z API. NET 4.0 MSBuild:
Http://www.odewit.net/ArticleContent.aspx?id=MsBuildApi4&format=html
List<ILogger> loggers = new List<ILogger>();
loggers.Add(new ConsoleLogger());
var projectCollection = new ProjectCollection();
projectCollection.RegisterLoggers(loggers);
var project = projectCollection.LoadProject(buildFileUri); // Needs a reference to System.Xml
try
{
project.Build();
}
finally
{
projectCollection.UnregisterAllLoggers();
}
Prostszy przykład:
var project = new Project(buildFileUri, null, "4.0");
var ok = project.Build(); // or project.Build(targets, loggers)
return ok;
Pamiętaj, aby używać profilu. NET 4 (nie Profilu Klienta).
Dodaj następujące referencje: System.XML, Microsoft.Build, Microsoft.Buduj.Framework i opcjonalnie Microsoft.Buduj.Narzędzia.v4. 0.
Zobacz też:Uruchamianie msbuild programowo
Aby zbudować rozwiązanie, wykonaj następujące czynności:
var props = new Dictionary<string, string>();
props["Configuration"] = "Release";
var request = new BuildRequestData(buildFileUri, props, null, new string[] { "Build" }, null);
var parms = new BuildParameters();
// parms.Loggers = ...;
var result = BuildManager.DefaultBuildManager.Build(parms, request);
return result.OverallResult == BuildResultCode.Success;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:48
// Fix to the path of your msbuild
var pathToMsBuild = "C:\\Windows\\DotNet\\Framework\\msbuild.exe";
Process.Start(pathToMsBuild + " " + pathToSolution);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 18:36:47
Możesz utworzyć .plik proj:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<!-- Common -->
<Solution Include="Common\Util\Util.sln"/>
<Solution Include="Common\EventScheduler\EventSchedulerSolution\EventSchedulerSolution.sln"/>
<!-- Server -->
<Solution Include="Server\DataLayer\DataTransferObjects\SharedModel\SharedModel.sln"/>
<Solution Include="Server\DataLayer\DataTier\ESPDAL.sln"/>
<!-- Internal Tools -->
<Solution Include="InternalTools\ServerSchemaUtility\ServerSchemaUtility.sln"/>
</ItemGroup>
<Target Name="Rebuild">
<MSBuild Projects="@(Solution)" Targets="Rebuild" Properties="Configuration=Release"/>
</Target>
</Project>
A następnie zadzwoń do msbuild.exe używając pliku proj jako argumentu, poniżej znajduje się przykład pliku wsadowego. Z C# można wywołać proces.Zacznij zgodnie z innymi plakatami.
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" BuildSolutions.proj
pause
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 18:47:27
Możesz spróbować przejąć kontrolę nad MSBuild używając MSBuild API
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-22 12:40:30
Jeśli potrzebujesz kompilacji z kodu rozszerzenia Visual Studio, musisz wziąć pod uwagę ograniczenia nałożone przez interfejs IVsBuildManagerAccessor-zobacz Uwagi ogólne, w tym nowy IVsBuildManagerAccessor.docx z Managed Package Framework for Projects . Widelec jest również dostępny na github.
W Visual Studio 2010 z MSBuild 4.0 pojawiają się nowe interakcje pomiędzy Solution Build Manager a MSBuild, które mają wpływ na projekt systemy korzystanie z tych usług. MSBuild 4.0 zawiera nowy komponent zwany menedżerem budowania (nie mylić z Solution Build Manager, który jest komponentem VS), który kontroluje składanie wniosków o budowę. Stało się to konieczne jako Visual Studio 2010 pozwala teraz na równoległe Kompilacje (zwłaszcza projekty natywne) i dostęp do współdzielonych zasobów, takich jak procesor, musiał być pośredniczony. Na systemy projektowe, które wcześniej nazywały się po prostu projektem.Build () to wywołaj build kilka zmiany muszą zostać wprowadzone. System projektowy teraz "must": {]}
- poproś o usługę SVsBuildManagerAccessor używając interfejsu IServiceProvider. Należy to zrobić wkrótce po system projektu jest ładowany, na długo przed ewentualnymi kompilacjami.
- powiadom system, jeśli potrzebujesz wątku UI
- powiadom system, jeśli robisz projekt-czas budowania.
- Rejestruj jego loggery za pomocą Accessora Build Managera.
- Prześlij żądania budowania bezpośrednio do Menedżera kompilacji MSBuild, zamiast wywoływania metody w projekcie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-10 13:44:28
Z pewnością możesz użyć msbuild do zbudowania dowolnego pliku rozwiązania Visual Studio.
Wierzę, że możesz użyć Process.Start
do wywołania msbuild z odpowiednimi parametrami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 18:36:46