本文整理汇总了C#中MonoDevelop.Core.ProgressMonitor.ReportWarning方法的典型用法代码示例。如果您正苦于以下问题:C# ProgressMonitor.ReportWarning方法的具体用法?C# ProgressMonitor.ReportWarning怎么用?C# ProgressMonitor.ReportWarning使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MonoDevelop.Core.ProgressMonitor
的用法示例。
在下文中一共展示了ProgressMonitor.ReportWarning方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InstallEntry
void InstallEntry (ProgressMonitor monitor, DeployContext ctx, SolutionFolderItem entry, ConfigurationSelector configuration)
{
foreach (DeployFile df in DeployService.GetDeployFiles (ctx, new SolutionFolderItem[] { entry }, configuration)) {
string targetPath = df.ResolvedTargetFile;
if (targetPath == null) {
monitor.ReportWarning ("Could not copy file '" + df.RelativeTargetPath + "': Unknown target directory.");
continue;
}
CopyFile (monitor, df.SourcePath, df.ResolvedTargetFile, df.FileAttributes);
}
SolutionFolder c = entry as SolutionFolder;
if (c != null) {
monitor.BeginTask ("Installing solution '" + c.Name + "'", c.Items.Count);
foreach (SolutionFolderItem ce in c.Items) {
InstallEntry (monitor, ctx, ce, configuration);
monitor.Step (1);
}
monitor.EndTask ();
}
}
示例2: CreateUnknownSolutionItem
internal static SolutionItem CreateUnknownSolutionItem (ProgressMonitor monitor, string fileName, string typeGuid, string unknownTypeGuid, SolutionLoadContext ctx)
{
bool loadAsProject = false;
string unsupportedMessage;
var relPath = ctx != null && ctx.Solution != null ? new FilePath (fileName).ToRelative (ctx.Solution.BaseDirectory).ToString() : new FilePath (fileName).FileName;
var guids = !string.IsNullOrEmpty (unknownTypeGuid) ? unknownTypeGuid.Split (new char[] {';'}, StringSplitOptions.RemoveEmptyEntries) : new string[0];
if (!string.IsNullOrEmpty (unknownTypeGuid)) {
var projectInfo = MSBuildProjectService.GetUnknownProjectTypeInfo (guids, fileName);
if (projectInfo != null) {
loadAsProject = projectInfo.LoadFiles;
unsupportedMessage = projectInfo.GetInstructions ();
LoggingService.LogWarning (string.Format ("Could not load {0} project '{1}'. {2}", projectInfo.Name, relPath, projectInfo.GetInstructions ()));
monitor.ReportWarning (GettextCatalog.GetString ("Could not load {0} project '{1}'. {2}", projectInfo.Name, relPath, projectInfo.GetInstructions ()));
} else {
unsupportedMessage = GettextCatalog.GetString ("Unknown project type: {0}", unknownTypeGuid);
LoggingService.LogWarning (string.Format ("Could not load project '{0}' with unknown item type '{1}'", relPath, unknownTypeGuid));
monitor.ReportWarning (GettextCatalog.GetString ("Could not load project '{0}' with unknown item type '{1}'", relPath, unknownTypeGuid));
return null;
}
} else {
unsupportedMessage = GettextCatalog.GetString ("Unknown project type");
LoggingService.LogWarning (string.Format ("Could not load project '{0}' with unknown item type", relPath));
monitor.ReportWarning (GettextCatalog.GetString ("Could not load project '{0}' with unknown item type", relPath));
}
if (loadAsProject) {
var project = (Project) CreateUninitializedInstance (typeof(UnknownProject));
project.UnsupportedProjectMessage = unsupportedMessage;
project.SetCreationContext (Project.CreationContext.Create (typeGuid, new string[0]));
return project;
} else
return null;
}
示例3: BuildDone
void BuildDone (ProgressMonitor monitor, BuildResult result, IBuildTarget entry, ITimeTracker tt)
{
TaskListEntry[] tasks = null;
tt.Trace ("Begin reporting build result");
try {
if (result != null) {
lastResult = result;
monitor.Log.WriteLine ();
monitor.Log.WriteLine (GettextCatalog.GetString ("---------------------- Done ----------------------"));
tt.Trace ("Updating task service");
tasks = new TaskListEntry [result.Errors.Count];
for (int n=0; n<tasks.Length; n++) {
tasks [n] = new TaskListEntry (result.Errors [n]);
tasks [n].Owner = this;
}
TaskService.Errors.AddRange (tasks);
TaskService.Errors.ResetLocationList ();
IdeApp.Workbench.ActiveLocationList = TaskService.Errors;
tt.Trace ("Reporting result");
string errorString = GettextCatalog.GetPluralString("{0} error", "{0} errors", result.ErrorCount, result.ErrorCount);
string warningString = GettextCatalog.GetPluralString("{0} warning", "{0} warnings", result.WarningCount, result.WarningCount);
if (monitor.CancellationToken.IsCancellationRequested) {
monitor.ReportError (GettextCatalog.GetString ("Build canceled."), null);
} else if (result.ErrorCount == 0 && result.WarningCount == 0 && lastResult.FailedBuildCount == 0) {
monitor.ReportSuccess (GettextCatalog.GetString ("Build successful."));
} else if (result.ErrorCount == 0 && result.WarningCount > 0) {
monitor.ReportWarning(GettextCatalog.GetString("Build: ") + errorString + ", " + warningString);
} else if (result.ErrorCount > 0) {
monitor.ReportError(GettextCatalog.GetString("Build: ") + errorString + ", " + warningString, null);
} else {
monitor.ReportError(GettextCatalog.GetString("Build failed."), null);
}
tt.Trace ("End build event");
OnEndBuild (monitor, lastResult.FailedBuildCount == 0, lastResult, entry as SolutionFolderItem);
} else {
tt.Trace ("End build event");
OnEndBuild (monitor, false);
}
tt.Trace ("Showing results pad");
try {
Pad errorsPad = IdeApp.Workbench.GetPad<MonoDevelop.Ide.Gui.Pads.ErrorListPad> ();
switch (IdeApp.Preferences.ShowErrorPadAfterBuild.Value) {
case BuildResultStates.Always:
if (!errorsPad.Visible)
errorsPad.IsOpenedAutomatically = true;
errorsPad.Visible = true;
errorsPad.BringToFront ();
break;
case BuildResultStates.Never:
break;
case BuildResultStates.OnErrors:
if (TaskService.Errors.Any (task => task.Severity == TaskSeverity.Error))
goto case BuildResultStates.Always;
goto case BuildResultStates.Never;
case BuildResultStates.OnErrorsOrWarnings:
if (TaskService.Errors.Any (task => task.Severity == TaskSeverity.Error || task.Severity == TaskSeverity.Warning))
goto case BuildResultStates.Always;
goto case BuildResultStates.Never;
}
} catch {}
if (tasks != null) {
TaskListEntry jumpTask = null;
switch (IdeApp.Preferences.JumpToFirstErrorOrWarning.Value) {
case JumpToFirst.Error:
jumpTask = tasks.FirstOrDefault (t => t.Severity == TaskSeverity.Error && TaskStore.IsProjectTaskFile (t));
break;
case JumpToFirst.ErrorOrWarning:
jumpTask = tasks.FirstOrDefault (t => (t.Severity == TaskSeverity.Error || t.Severity == TaskSeverity.Warning) && TaskStore.IsProjectTaskFile (t));
break;
}
if (jumpTask != null) {
tt.Trace ("Jumping to first result position");
jumpTask.JumpToPosition ();
}
}
} finally {
monitor.Dispose ();
tt.End ();
}
}
示例4: LoadSolution
internal void LoadSolution (Solution sol, SlnFile sln, ProgressMonitor monitor, SolutionLoadContext ctx)
{
var version = sln.FormatVersion;
//Parse the .sln file
var folder = sol.RootFolder;
sol.Version = "0.1"; //FIXME:
monitor.BeginTask("Loading projects ..", sln.Projects.Count + 1);
Dictionary<string, SolutionFolderItem> items = new Dictionary<string, SolutionFolderItem> ();
List<string> sortedList = new List<string> ();
List<Task> loadTasks = new List<Task> ();
foreach (SlnProject sec in sln.Projects) {
try {
// Valid guid?
new Guid (sec.TypeGuid);
} catch (FormatException) {
monitor.Step (1);
//Use default guid as projectGuid
LoggingService.LogDebug (GettextCatalog.GetString (
"Invalid Project type guid '{0}' on line #{1}. Ignoring.",
sec.Id,
sec.Line));
continue;
}
string projTypeGuid = sec.TypeGuid.ToUpper ();
string projectName = sec.Name;
string projectPath = sec.FilePath;
string projectGuid = sec.Id;
lock (items)
sortedList.Add (projectGuid);
if (projTypeGuid == MSBuildProjectService.FolderTypeGuid) {
//Solution folder
SolutionFolder sfolder = new SolutionFolder ();
sfolder.Name = projectName;
sfolder.ItemId = projectGuid;
DeserializeSolutionItem (monitor, sol, sfolder, sec);
foreach (string f in ReadFolderFiles (sec))
sfolder.Files.Add (MSBuildProjectService.FromMSBuildPath (Path.GetDirectoryName (sol.FileName), f));
lock (items)
items.Add (projectGuid, sfolder);
monitor.Step (1);
continue;
}
if (projectPath.StartsWith("http://")) {
monitor.ReportWarning (GettextCatalog.GetString (
"{0}({1}): Projects with non-local source (http://...) not supported. '{2}'.",
sol.FileName, sec.Line, projectPath));
monitor.Step (1);
continue;
}
string path = MSBuildProjectService.FromMSBuildPath (Path.GetDirectoryName (sol.FileName), projectPath);
if (String.IsNullOrEmpty (path)) {
monitor.ReportWarning (GettextCatalog.GetString (
"Invalid project path found in {0} : {1}", sol.FileName, projectPath));
LoggingService.LogWarning (GettextCatalog.GetString (
"Invalid project path found in {0} : {1}", sol.FileName, projectPath));
monitor.Step (1);
continue;
}
projectPath = Path.GetFullPath (path);
SolutionItem item = null;
Task<SolutionItem> loadTask;
DateTime ti = DateTime.Now;
if (sol.IsSolutionItemEnabled (projectPath)) {
loadTask = Services.ProjectService.ReadSolutionItem (monitor, projectPath, format, projTypeGuid, projectGuid, ctx);
} else {
loadTask = Task.FromResult<SolutionItem> (new UnloadedSolutionItem () {
FileName = projectPath
});
}
var ft = loadTask.ContinueWith (ta => {
try {
item = ta.Result;
if (item == null)
throw new UnknownSolutionItemTypeException (projTypeGuid);
} catch (Exception cex) {
var e = UnwrapException (cex).First ();
string unsupportedMessage = e.Message;
if (e is UserException) {
var ex = (UserException) e;
LoggingService.LogError ("{0}: {1}", ex.Message, ex.Details);
monitor.ReportError (string.Format ("{0}{1}{1}{2}", ex.Message, Environment.NewLine, ex.Details), null);
//.........这里部分代码省略.........
示例5: ValidateSchema
/// <summary>
/// Validates the schema.
/// </summary>
public static XmlSchema ValidateSchema (ProgressMonitor monitor, string xml, string fileName)
{
monitor.BeginTask (GettextCatalog.GetString ("Validating schema..."), 1);
bool error = false;
XmlSchema schema = null;
try {
StringReader stringReader = new StringReader (xml);
XmlTextReader xmlReader = new XmlTextReader (stringReader);
xmlReader.XmlResolver = null;
ValidationEventHandler callback = delegate (object source, ValidationEventArgs args) {
if (args.Severity == XmlSeverityType.Warning) {
monitor.ReportWarning (args.Message);
} else {
monitor.ReportError (args.Message, args.Exception);
error = true;
}
AddTask (fileName, args.Message, args.Exception.LinePosition, args.Exception.LineNumber,
(args.Severity == XmlSeverityType.Warning)? TaskSeverity.Warning : TaskSeverity.Error);
};
schema = XmlSchema.Read (xmlReader, callback);
XmlSchemaSet sset = new XmlSchemaSet ();
sset.Add (schema);
sset.ValidationEventHandler += callback;
sset.Compile ();
}
catch (XmlSchemaException ex) {
monitor.ReportError (ex.Message, ex);
AddTask (fileName, ex.Message, ex.LinePosition, ex.LineNumber,TaskSeverity.Error);
error = true;
}
catch (XmlException ex) {
monitor.ReportError (ex.Message, ex);
AddTask (fileName, ex.Message, ex.LinePosition, ex.LineNumber,TaskSeverity.Error);
error = true;
}
if (error) {
monitor.Log.WriteLine (GettextCatalog.GetString ("Validation failed."));
TaskService.ShowErrors ();
} else {
monitor.Log.WriteLine (GettextCatalog.GetString ("Schema is valid."));
}
monitor.EndTask ();
return error? null: schema;
}
示例6: CopyFiles
bool CopyFiles (ProgressMonitor monitor, IWorkspaceFileObject obj, IEnumerable<FilePath> files, FilePath targetBasePath, bool ignoreExternalFiles)
{
FilePath baseDir = obj.BaseDirectory.FullPath;
foreach (FilePath file in files) {
if (!File.Exists (file)) {
monitor.ReportWarning (GettextCatalog.GetString ("File '{0}' not found.", file));
continue;
}
FilePath fname = file.FullPath;
// Can't export files from outside the root solution directory
if (!fname.IsChildPathOf (baseDir)) {
if (ignoreExternalFiles)
continue;
if (obj is Solution)
monitor.ReportError (GettextCatalog.GetString ("The solution '{0}' is referencing the file '{1}' which is located outside the root solution directory.", obj.Name, Path.GetFileName (file)), null);
else
monitor.ReportError (GettextCatalog.GetString ("The project '{0}' is referencing the file '{1}' which is located outside the project directory.", obj.Name, Path.GetFileName (file)), null);
return false;
}
FilePath rpath = fname.ToRelative (baseDir);
rpath = rpath.ToAbsolute (targetBasePath);
if (!Directory.Exists (rpath.ParentDirectory))
Directory.CreateDirectory (rpath.ParentDirectory);
File.Copy (file, rpath, true);
}
return true;
}
示例7: CheckForPackageUpdates
void CheckForPackageUpdates (
ProgressMonitor progressMonitor,
ProgressMonitorStatusMessage progressMessage,
PackageUpdatesEventMonitor eventMonitor)
{
updatedPackagesInSolution.CheckForUpdates ();
if (updatedPackagesInSolution.AnyUpdates ()) {
progressMonitor.ReportSuccess (GettextCatalog.GetString ("Package updates are available."));
} else if (eventMonitor.WarningReported) {
progressMonitor.ReportWarning (progressMessage.Warning);
} else {
progressMonitor.ReportSuccess (progressMessage.Success);
}
}
示例8: BuildDone
void BuildDone (ProgressMonitor monitor, BuildResult result, IBuildTarget entry, ITimeTracker tt)
{
TaskListEntry[] tasks = null;
tt.Trace ("Begin reporting build result");
try {
if (result != null) {
lastResult = result;
monitor.Log.WriteLine ();
monitor.Log.WriteLine (GettextCatalog.GetString ("---------------------- Done ----------------------"));
tt.Trace ("Updating task service");
tasks = ReportErrors (result);
tt.Trace ("Reporting result");
string errorString = GettextCatalog.GetPluralString("{0} error", "{0} errors", result.ErrorCount, result.ErrorCount);
string warningString = GettextCatalog.GetPluralString("{0} warning", "{0} warnings", result.WarningCount, result.WarningCount);
if (monitor.CancellationToken.IsCancellationRequested) {
monitor.ReportError (GettextCatalog.GetString ("Build canceled."), null);
} else if (result.ErrorCount == 0 && result.WarningCount == 0 && lastResult.FailedBuildCount == 0) {
monitor.ReportSuccess (GettextCatalog.GetString ("Build successful."));
} else if (result.ErrorCount == 0 && result.WarningCount > 0) {
monitor.ReportWarning(GettextCatalog.GetString("Build: ") + errorString + ", " + warningString);
} else if (result.ErrorCount > 0) {
monitor.ReportError(GettextCatalog.GetString("Build: ") + errorString + ", " + warningString, null);
} else {
monitor.ReportError(GettextCatalog.GetString("Build failed."), null);
}
tt.Trace ("End build event");
OnEndBuild (monitor, lastResult.FailedBuildCount == 0, lastResult, entry as SolutionFolderItem);
} else {
tt.Trace ("End build event");
OnEndBuild (monitor, false);
}
tt.Trace ("Showing results pad");
ShowErrorsPadIfNecessary ();
if (tasks != null) {
TaskListEntry jumpTask = null;
switch (IdeApp.Preferences.JumpToFirstErrorOrWarning.Value) {
case JumpToFirst.Error:
jumpTask = tasks.FirstOrDefault (t => t.Severity == TaskSeverity.Error && TaskStore.IsProjectTaskFile (t));
break;
case JumpToFirst.ErrorOrWarning:
jumpTask = tasks.FirstOrDefault (t => (t.Severity == TaskSeverity.Error || t.Severity == TaskSeverity.Warning) && TaskStore.IsProjectTaskFile (t));
break;
}
if (jumpTask != null) {
tt.Trace ("Jumping to first result position");
jumpTask.JumpToPosition ();
}
}
} finally {
monitor.Dispose ();
tt.End ();
}
}
示例9: CleanDone
void CleanDone (ProgressMonitor monitor, BuildResult result, IBuildTarget entry, ITimeTracker tt)
{
tt.Trace ("Begin reporting clean result");
try {
if (result != null) {
monitor.Log.WriteLine ();
monitor.Log.WriteLine (GettextCatalog.GetString ("---------------------- Done ----------------------"));
tt.Trace ("Updating task service");
ReportErrors (result);
tt.Trace ("Reporting result");
string errorString = GettextCatalog.GetPluralString ("{0} error", "{0} errors", result.ErrorCount, result.ErrorCount);
string warningString = GettextCatalog.GetPluralString ("{0} warning", "{0} warnings", result.WarningCount, result.WarningCount);
if (monitor.CancellationToken.IsCancellationRequested) {
monitor.ReportError (GettextCatalog.GetString ("Clean canceled."), null);
} else if (result.ErrorCount == 0 && result.WarningCount == 0 && result.FailedBuildCount == 0) {
monitor.ReportSuccess (GettextCatalog.GetString ("Clean successful."));
} else if (result.ErrorCount == 0 && result.WarningCount > 0) {
monitor.ReportWarning (GettextCatalog.GetString ("Clean: ") + errorString + ", " + warningString);
} else if (result.ErrorCount > 0) {
monitor.ReportError (GettextCatalog.GetString ("Clean: ") + errorString + ", " + warningString, null);
} else {
monitor.ReportError (GettextCatalog.GetString ("Clean failed."), null);
}
}
OnEndClean (monitor, tt);
tt.Trace ("Showing results pad");
ShowErrorsPadIfNecessary ();
} finally {
monitor.Dispose ();
tt.End ();
}
}
示例10: UpdateCatalog
public virtual void UpdateCatalog (TranslationProject project, Catalog catalog, ProgressMonitor monitor, string fileName)
{
string text = File.ReadAllText (fileName);
string relativeFileName = MonoDevelop.Core.FileService.AbsoluteToRelativePath (project.BaseDirectory, fileName);
string fileNamePrefix = relativeFileName + ":";
if (String.IsNullOrEmpty (text))
return;
// Get a list of all excluded regions
List<Match> excludeMatches = new List<Match> ();
foreach (Regex regex in excluded) {
foreach (Match m in regex.Matches (text))
excludeMatches.Add (m);
}
// Sort the list by match index
excludeMatches.Sort (delegate (Match a, Match b) {
return a.Index.CompareTo (b.Index);
});
// Remove from the list all regions which start in an excluded region
int pos=0;
for (int n=0; n<excludeMatches.Count; n++) {
Match m = excludeMatches [n];
if (m.Index < pos) {
excludeMatches.RemoveAt (n);
n--;
} else {
pos = m.Index + m.Length;
}
}
foreach (RegexInfo ri in regexes) {
int lineNumber = 0;
int oldIndex = 0;
foreach (Match match in ri.Regex.Matches (text)) {
// Ignore matches inside excluded regions
bool ignore = false;
foreach (Match em in excludeMatches) {
if (match.Index >= em.Index && match.Index < em.Index + em.Length) {
ignore = true;
LoggingService.LogDebug ("Excluded Gettext string '{0}' in file '{1}'", match.Groups[ri.ValueGroupIndex].Value, fileName);
break;
}
}
if (ignore)
continue;
string mt = match.Groups[ri.ValueGroupIndex].Value;
if (mt.Length == 0)
continue;
foreach (TransformInfo ti in transforms)
mt = ti.Regex.Replace (mt, ti.ReplaceText);
try {
mt = StringEscaping.UnEscape (ri.EscapeMode, mt);
} catch (FormatException fex) {
monitor.ReportWarning ("Error unescaping string '" + mt + "': " + fex.Message);
continue;
}
if (mt.Trim().Length == 0)
continue;
//get the plural string if it's a plural form and apply transforms
string pt = ri.PluralGroupIndex != -1 ? match.Groups[ri.PluralGroupIndex].Value : null;
if (pt != null)
foreach (TransformInfo ti in transforms)
pt = ti.Regex.Replace (pt, ti.ReplaceText);
//add to the catalog
CatalogEntry entry = catalog.AddItem (mt, pt);
lineNumber += GetLineCount (text, oldIndex, match.Index);
oldIndex = match.Index;
entry.AddReference (fileNamePrefix + lineNumber);
}
}
}
示例11: OnBuild
async Task<BuildResult> OnBuild (ProgressMonitor monitor, ConfigurationSelector configuration)
{
if (!project.OnGetNeedsBuilding (configuration)) {
monitor.Log.WriteLine (GettextCatalog.GetString ("Skipping project since output files are up to date"));
return new BuildResult ();
}
if (!project.TargetRuntime.IsInstalled (project.TargetFramework)) {
BuildResult res = new BuildResult ();
res.AddError (GettextCatalog.GetString ("Framework '{0}' not installed.", project.TargetFramework.Name));
return res;
}
bool hasBuildableFiles = false;
foreach (ProjectFile pf in project.Files) {
if (pf.BuildAction == BuildAction.Compile || pf.BuildAction == BuildAction.EmbeddedResource) {
hasBuildableFiles = true;
break;
}
}
if (!hasBuildableFiles)
return new BuildResult ();
if (project.LanguageBinding == null) {
BuildResult langres = new BuildResult ();
string msg = GettextCatalog.GetString ("Unknown language '{0}'. You may need to install an additional add-in to support this language.", project.LanguageName);
langres.AddError (msg);
monitor.ReportError (msg, null);
return langres;
}
BuildResult refres = null;
HashSet<ProjectItem> itemsToExclude = new HashSet<ProjectItem> ();
foreach (ProjectReference pr in project.References) {
if (pr.ReferenceType == ReferenceType.Project) {
// Ignore non-dotnet projects
Project p = project.ParentSolution != null ? pr.ResolveProject (project.ParentSolution) : null;
if (p != null && !(p is DotNetProject))
continue;
if (p == null || pr.GetReferencedFileNames (configuration).Length == 0) {
if (refres == null)
refres = new BuildResult ();
string msg = GettextCatalog.GetString ("Referenced project '{0}' not found in the solution.", pr.Reference);
monitor.ReportWarning (msg);
refres.AddWarning (msg);
}
}
if (!pr.IsValid) {
if (refres == null)
refres = new BuildResult ();
string msg;
if (!pr.IsExactVersion && pr.SpecificVersion) {
msg = GettextCatalog.GetString ("Reference '{0}' not found on system. Using '{1}' instead.", pr.StoredReference, pr.Reference);
monitor.ReportWarning (msg);
refres.AddWarning (msg);
}
else {
bool errorsFound = false;
foreach (string asm in pr.GetReferencedFileNames (configuration)) {
if (!File.Exists (asm)) {
msg = GettextCatalog.GetString ("Assembly '{0}' not found. Make sure that the assembly exists in disk. If the reference is required to build the project you may get compilation errors.", Path.GetFileName (asm));
refres.AddWarning (msg);
monitor.ReportWarning (msg);
errorsFound = true;
itemsToExclude.Add (pr);
}
}
msg = null;
if (!errorsFound) {
msg = GettextCatalog.GetString ("The reference '{0}' is not valid for the target framework of the project.", pr.StoredReference, pr.Reference);
monitor.ReportWarning (msg);
refres.AddWarning (msg);
itemsToExclude.Add (pr);
}
}
}
}
DotNetProjectConfiguration conf = (DotNetProjectConfiguration) project.GetConfiguration (configuration);
// Create a copy of the data needed to compile the project.
// This data can be modified by extensions.
// Also filter out items whose condition evaluates to false
BuildData buildData = new BuildData ();
ProjectParserContext ctx = new ProjectParserContext (project, conf);
buildData.Items = new ProjectItemCollection ();
foreach (ProjectItem item in project.Items) {
if (!itemsToExclude.Contains (item) && (string.IsNullOrEmpty (item.Condition) || ConditionParser.ParseAndEvaluate (item.Condition, ctx)))
buildData.Items.Add (item);
}
buildData.Configuration = (DotNetProjectConfiguration) project.CloneConfiguration (conf, conf.Id);
buildData.Configuration.SetParentItem (project);
buildData.ConfigurationSelector = configuration;
//.........这里部分代码省略.........
示例12: UpdateProject
//use events..
public void UpdateProject (ProgressMonitor monitor, bool promptForRemoval)
{
if (!IntegrationEnabled)
return;
if (ownerProject == null)
throw new InvalidOperationException ("Internal Error: ownerProject not set");
this.monitor = monitor;
try {
Makefile.GetVariables ();
} catch (Exception e) {
monitor.ReportError (GettextCatalog.GetString (
"Invalid Makefile '{0}'. Disabling Makefile integration.", AbsoluteMakefileName), e);
IntegrationEnabled = false;
return;
}
//FIXME: Improve the message
if (promptForRemoval) {
AlertButton projectButton = new AlertButton ("_Project");
AlertButton makefileButton = new AlertButton ("_Makefile");
AlertButton choice = MessageService.AskQuestion (GettextCatalog.GetString ("Enabling Makefile integration. You can choose to have either the Project or the Makefile be used as the master copy. This is done only when enabling this feature. After this, the Makefile will be taken as the master copy."),
projectButton, makefileButton);
if (choice == projectButton) {
//Sync Project --> Makefile
dirty = true;
return;
}
}
dirty = true;
encodeValues = null;
try {
if (IsAutotoolsProject) {
string path = Path.Combine (AbsoluteConfigureInPath, "configure.in");
if (!File.Exists (path))
path = Path.Combine (AbsoluteConfigureInPath, "configure.ac");
configuredPackages = null;
WeakReference weakref;
if (PkgManagerTable.TryGetValue (path, out weakref)) {
if (weakref.IsAlive) {
configuredPackages = (ConfiguredPackagesManager) weakref.Target;
FileInfo finfo = new FileInfo (path);
if (finfo.LastWriteTime > configuredPackages.LastWriteTime)
// file has changed since last time we parsed it!
configuredPackages = null;
}
}
// no entry in table or it got collected or file has changed
if (configuredPackages == null) {
configuredPackages = new ConfiguredPackagesManager (path);
PkgManagerTable [path] = new WeakReference (configuredPackages);
ownerProject.ExtendedProperties ["MonoDevelop.Autotools.ConfiguredPackagesManager"] = configuredPackages;
}
}
} catch (Exception e) {
LoggingService.LogWarning (
"Error trying to read configure.in ('{0}') for project '{1}':\n{2}",
AbsoluteConfigureInPath, OwnerProject.Name, e.ToString ());
monitor.ReportWarning (GettextCatalog.GetString (
"Error trying to read configure.in ('{0}') for project '{1}':\n{2}",
AbsoluteConfigureInPath, OwnerProject.Name, e.Message));
}
ReadFiles (BuildFilesVar, BuildAction.Compile, "Build", promptForRemoval);
ReadFiles (DeployFilesVar, BuildAction.Content, "Deploy", promptForRemoval);
ReadFiles (OthersVar, BuildAction.None, "Others", promptForRemoval);
ReadFiles (ResourcesVar, BuildAction.EmbeddedResource, "Resources", promptForRemoval);
if (!SyncReferences)
return;
try {
SaveReferences = true;
//Do these for DotNetProject only
DotNetProject dotnetProject = ownerProject as DotNetProject;
if (dotnetProject != null) {
PackageRefVar.Extra.Clear ();
AsmRefVar.Extra.Clear ();
ProjectRefVar.Extra.Clear ();
existingPackageRefs = new Dictionary<string, ProjectReference> ();
requiredPackageVersions = new Dictionary<string,string> ();
newPackageRefs = new Dictionary<string, ProjectReference> ();
List<ProjectReference> toRemove = new List<ProjectReference> ();
foreach (ProjectReference pref in dotnetProject.References) {
if (pref.ReferenceType == ReferenceType.Package) {
string [] files = pref.GetReferencedFileNames (ConfigurationSelector.Default);
if (files == null)
continue;
//.........这里部分代码省略.........
示例13: Deploy
//.........这里部分代码省略.........
("Could not add reference to project '{0}'", refp.Name) );
projectReferences.WriteLine (" \\");
projectReferences.Write ("\t");
pref = project.GetRelativeChildPath (dnpc.CompiledOutputName);
projectReferences.Write (MakefileData.ToMakefilePath (pref));
}
configSection.BuildVariablesBuilder.AppendFormat ( "PROJECT_REFERENCES = {0}\n", projectReferences.ToString() );
string buildDir = project.GetRelativeChildPath (config.OutputDirectory);
configSection.BuildVariablesBuilder.AppendFormat ("BUILD_DIR = {0}\n", MakefileData.ToMakefilePath (buildDir));
// Register files built by this configuration.
// Built files won't be distributed.
foreach (string bfile in builtFiles)
ctx.AddBuiltFile (Path.Combine (config.OutputDirectory, bfile));
DeployFileCollection deployFiles = DeployService.GetDeployFiles (
ctx.DeployContext, new SolutionFolderItem[] { project }, config.Selector);
ProcessDeployFilesForConfig (deployFiles, project, configSection, ctx, config);
configSections.Add (configSection);
if (!generateAutotools) {
EmitCustomCommandTargets (config.CustomCommands, project, customCommands, combineConfig.Id,
new CustomCommandType [] {
CustomCommandType.BeforeBuild,
CustomCommandType.AfterBuild,
CustomCommandType.BeforeClean,
CustomCommandType.AfterClean}, monitor);
} else {
if (config.CustomCommands.Count > 0)
monitor.ReportWarning (GettextCatalog.GetString ("Custom commands are not supported for autotools based makefiles. Ignoring."));
}
// Register files generated by the compiler
ctx.AddBuiltFile (project.GetOutputFileName (combineConfig.Selector));
if (config.DebugSymbols)
ctx.AddBuiltFile (project.GetOutputFileName (combineConfig.Selector) + ".mdb");
if (config.SignAssembly) {
string spath = project.GetRelativeChildPath (config.AssemblyKeyFile);
spath = FileService.NormalizeRelativePath (spath);
extraFiles.Add (MakefileData.ToMakefilePath (spath));
}
if (buildEnabled && pkgs.Count > 0)
ctx.AddRequiredPackages (combineConfig.Id, pkgs);
}
foreach (string ef in extraFiles)
extras.AppendFormat ("\\\n\t{0} ", ef);
Dictionary<string, DeployFileData> commonDeployVars = new Dictionary<string, DeployFileData> (allDeployVars);
foreach (ConfigSection configSection in configSections) {
List<string> toRemove = new List<string> ();
foreach (KeyValuePair<string, DeployFileData> pair in commonDeployVars) {
if (!configSection.DeployFileVars.ContainsKey (pair.Key))
toRemove.Add (pair.Key);
}
foreach (string s in toRemove)
commonDeployVars.Remove (s);
}
示例14: EmitCustomCommandTargets
void EmitCustomCommandTargets (CustomCommandCollection commands, Project project, StringBuilder builder, string configName, CustomCommandType[] types, ProgressMonitor monitor)
{
bool warned = false;
configName = configName.ToUpper ();
foreach (CustomCommandType type in types) {
bool targetEmitted = false;
for (int i = 0; i < commands.Count; i ++) {
CustomCommand cmd = commands [i];
if (cmd.Type != type) {
if (!warned && Array.IndexOf (types, cmd.Type) < 0) {
//Warn (only once) if unsupported custom command is found,
StringBuilder types_list = new StringBuilder ();
foreach (CustomCommandType t in types)
types_list.AppendFormat ("{0}, ", t);
monitor.ReportWarning (GettextCatalog.GetString (
"Custom commands of only the following types are supported: {0}.", types_list.ToString ()));
warned = true;
}
continue;
}
if (!targetEmitted) {
builder.AppendFormat ("{0}_{1}:\n", configName, type.ToString ());
targetEmitted = true;
}
string dir, exe, args;
ResolveCustomCommand (project, cmd, out dir, out exe, out args);
builder.AppendFormat ("\t(cd {0} && {1} {2})\n", dir, exe, args);
}
if (targetEmitted)
builder.Append ("\n");
}
}
示例15: Compile
public static BuildResult Compile (ProjectItemCollection projectItems, DotNetProjectConfiguration configuration, ConfigurationSelector configSelector, ProgressMonitor monitor)
{
var compilerParameters = (CSharpCompilerParameters)configuration.CompilationParameters ?? new CSharpCompilerParameters ();
var projectParameters = (CSharpProject) configuration.ParentItem;
FilePath outputName = configuration.CompiledOutputName;
string responseFileName = Path.GetTempFileName ();
//make sure that the output file is writable
if (File.Exists (outputName)) {
bool isWriteable = false;
int count = 0;
do {
try {
outputName.MakeWritable ();
using (var stream = File.OpenWrite (outputName)) {
isWriteable = true;
}
} catch (Exception) {
Thread.Sleep (20);
}
} while (count++ < 5 && !isWriteable);
if (!isWriteable) {
MessageService.ShowError (string.Format (GettextCatalog.GetString ("Can't lock file: {0}."), outputName));
return null;
}
}
//get the runtime
TargetRuntime runtime = MonoDevelop.Core.Runtime.SystemAssemblyService.DefaultRuntime;
DotNetProject project = configuration.ParentItem as DotNetProject;
if (project != null)
runtime = project.TargetRuntime;
//get the compiler name
string compilerName;
try {
compilerName = GetCompilerName (runtime, configuration.TargetFramework);
} catch (Exception e) {
string message = "Could not obtain a C# compiler";
monitor.ReportError (message, e);
return null;
}
var sb = new StringBuilder ();
HashSet<string> alreadyAddedReference = new HashSet<string> ();
var monoRuntime = runtime as MonoTargetRuntime;
if (!compilerParameters.NoStdLib && (monoRuntime == null || monoRuntime.HasMultitargetingMcs)) {
string corlib = project.AssemblyContext.GetAssemblyFullName ("mscorlib", project.TargetFramework);
if (corlib != null) {
corlib = project.AssemblyContext.GetAssemblyLocation (corlib, project.TargetFramework);
}
if (corlib == null) {
var br = new BuildResult ();
br.AddError (string.Format ("Could not find mscorlib for framework {0}", project.TargetFramework.Id));
return br;
}
AppendQuoted (sb, "/r:", corlib);
sb.AppendLine ("-nostdlib");
}
List<string> gacRoots = new List<string> ();
sb.AppendFormat ("\"/out:{0}\"", outputName);
sb.AppendLine ();
foreach (ProjectReference lib in projectItems.GetAll <ProjectReference> ()) {
if (lib.ReferenceType == ReferenceType.Project) {
var ownerProject = lib.OwnerProject;
if (ownerProject != null) {
var parentSolution = ownerProject.ParentSolution;
if (parentSolution != null && !(lib.ResolveProject (parentSolution) is DotNetProject))
continue;
}
}
string refPrefix = string.IsNullOrEmpty (lib.Aliases) ? "" : lib.Aliases + "=";
foreach (string fileName in lib.GetReferencedFileNames (configSelector)) {
switch (lib.ReferenceType) {
case ReferenceType.Package:
SystemPackage pkg = lib.Package;
if (pkg == null) {
string msg = string.Format (GettextCatalog.GetString ("{0} could not be found or is invalid."), lib.Reference);
monitor.ReportWarning (msg);
continue;
}
if (alreadyAddedReference.Add (fileName))
AppendQuoted (sb, "/r:", refPrefix + fileName);
if (pkg.GacRoot != null && !gacRoots.Contains (pkg.GacRoot))
gacRoots.Add (pkg.GacRoot);
if (!string.IsNullOrEmpty (pkg.Requires)) {
foreach (string requiredPackage in pkg.Requires.Split(' ')) {
SystemPackage rpkg = runtime.AssemblyContext.GetPackage (requiredPackage);
if (rpkg == null)
continue;
foreach (SystemAssembly assembly in rpkg.Assemblies) {
if (alreadyAddedReference.Add (assembly.Location))
AppendQuoted (sb, "/r:", assembly.Location);
//.........这里部分代码省略.........