Поддержка пространств имен в проектах

Возможность расширять пространства имен .NET
This commit is contained in:
Бондарев Иван 2017-10-03 20:18:37 +02:00
parent 429d47271a
commit 3f520df65e
15 changed files with 344 additions and 306 deletions

View file

@ -1807,7 +1807,7 @@ namespace PascalABCCompiler
//Console.WriteLine("Compile Implementation "+UnitName);//DEBUG //Console.WriteLine("Compile Implementation "+UnitName);//DEBUG
//TODO: Избавиться от преобразования типа. //TODO: Избавиться от преобразования типа.
AddNamespaces(CurrentUnit.ImplementationUsingNamespaceList, CurrentUnit.PossibleNamespaces, true); AddNamespaces(CurrentUnit.ImplementationUsingNamespaceList, CurrentUnit.PossibleNamespaces, true, null);
#if DEBUG #if DEBUG
if (InternalDebug.SemanticAnalysis) if (InternalDebug.SemanticAnalysis)
@ -2704,7 +2704,7 @@ namespace PascalABCCompiler
return false; return false;
} }
private void IncludeNamespaces(CompilationUnit Unit) private Dictionary<string, SyntaxTree.syntax_namespace_node> IncludeNamespaces(CompilationUnit Unit)
{ {
if (HasIncludeNamespacesDirective(Unit) && Unit.SyntaxTree is SyntaxTree.unit_module && (Unit.SyntaxTree as SyntaxTree.unit_module).unit_name.HeaderKeyword != SyntaxTree.UnitHeaderKeyword.Library) if (HasIncludeNamespacesDirective(Unit) && Unit.SyntaxTree is SyntaxTree.unit_module && (Unit.SyntaxTree as SyntaxTree.unit_module).unit_name.HeaderKeyword != SyntaxTree.UnitHeaderKeyword.Library)
throw new IncludeNamespaceInUnit(CurrentCompilationUnit.SyntaxTree.file_name, CurrentCompilationUnit.SyntaxTree.source_context); throw new IncludeNamespaceInUnit(CurrentCompilationUnit.SyntaxTree.file_name, CurrentCompilationUnit.SyntaxTree.source_context);
@ -2810,6 +2810,7 @@ namespace PascalABCCompiler
main_library.interface_part.uses_modules = main_uses; main_library.interface_part.uses_modules = main_uses;
else else
main_program.used_units = main_uses; main_program.used_units = main_uses;
return namespaces;
} }
private SyntaxTree.compilation_unit GetNamespaceSyntaxTree(string FileName) private SyntaxTree.compilation_unit GetNamespaceSyntaxTree(string FileName)
@ -2917,9 +2918,9 @@ namespace PascalABCCompiler
return new TreeRealization.using_namespace(SyntaxTree.Utils.IdentListToString(_name_space.name.idents, ".")); return new TreeRealization.using_namespace(SyntaxTree.Utils.IdentListToString(_name_space.name.idents, "."));
} }
private TreeRealization.using_namespace GetNamespace(TreeRealization.using_namespace_list using_list, string full_namespace_name, SyntaxTree.unit_or_namespace _name_space, bool possible_is_unit) private TreeRealization.using_namespace GetNamespace(TreeRealization.using_namespace_list using_list, string full_namespace_name, SyntaxTree.unit_or_namespace _name_space, bool possible_is_unit, Dictionary<string, SyntaxTree.syntax_namespace_node> pabc_namespaces)
{ {
if (!NetHelper.NetHelper.NamespaceExists(full_namespace_name)) if (!NetHelper.NetHelper.NamespaceExists(full_namespace_name) && !(pabc_namespaces != null && pabc_namespaces.ContainsKey(full_namespace_name)))
{ {
if (possible_is_unit) if (possible_is_unit)
if (!full_namespace_name.Contains(".")) if (!full_namespace_name.Contains("."))
@ -2929,16 +2930,16 @@ namespace PascalABCCompiler
return new TreeRealization.using_namespace(full_namespace_name); return new TreeRealization.using_namespace(full_namespace_name);
} }
public void AddNamespaces(TreeRealization.using_namespace_list using_list, List<SyntaxTree.unit_or_namespace> namespaces, bool possible_is_units) public void AddNamespaces(TreeRealization.using_namespace_list using_list, List<SyntaxTree.unit_or_namespace> namespaces, bool possible_is_units, Dictionary<string, SyntaxTree.syntax_namespace_node> pabc_namespaces)
{ {
foreach (SyntaxTree.unit_or_namespace ns in namespaces) foreach (SyntaxTree.unit_or_namespace ns in namespaces)
using_list.AddElement(GetNamespace(using_list, SyntaxTree.Utils.IdentListToString(ns.name.idents, "."), ns, possible_is_units)); using_list.AddElement(GetNamespace(using_list, SyntaxTree.Utils.IdentListToString(ns.name.idents, "."), ns, possible_is_units, pabc_namespaces));
} }
public void AddNamespaces(TreeRealization.using_namespace_list using_list, SyntaxTree.using_list ul) public void AddNamespaces(TreeRealization.using_namespace_list using_list, SyntaxTree.using_list ul)
{ {
if (ul != null) if (ul != null)
AddNamespaces(using_list, ul.namespaces, false); AddNamespaces(using_list, ul.namespaces, false, null);
} }
public SyntaxTree.using_list GetInterfaceSyntaxUsingList(SyntaxTree.compilation_unit cu) public SyntaxTree.using_list GetInterfaceSyntaxUsingList(SyntaxTree.compilation_unit cu)
@ -3195,7 +3196,7 @@ namespace PascalABCCompiler
} }
} }
TreeRealization.unit_node_list References = GetReferences(CurrentUnit); TreeRealization.unit_node_list References = GetReferences(CurrentUnit);
IncludeNamespaces(CurrentUnit); var namespaces = IncludeNamespaces(CurrentUnit);
if (SyntaxUsesList != null) if (SyntaxUsesList != null)
{ {
@ -3240,7 +3241,7 @@ namespace PascalABCCompiler
CurrentUnit.InterfaceUsedUnits.AddRange(References); CurrentUnit.InterfaceUsedUnits.AddRange(References);
AddNamespaces(CurrentUnit.InterfaceUsingNamespaceList, CurrentUnit.PossibleNamespaces, true); AddNamespaces(CurrentUnit.InterfaceUsingNamespaceList, CurrentUnit.PossibleNamespaces, true, namespaces);
AddNamespaces(CurrentUnit.InterfaceUsingNamespaceList, GetInterfaceSyntaxUsingList(CurrentUnit.SyntaxTree)); AddNamespaces(CurrentUnit.InterfaceUsingNamespaceList, GetInterfaceSyntaxUsingList(CurrentUnit.SyntaxTree));
//Console.WriteLine("Compile Interface "+UnitName);//DEBUG //Console.WriteLine("Compile Interface "+UnitName);//DEBUG
@ -3305,7 +3306,7 @@ namespace PascalABCCompiler
CurrentCompilationUnit = CurrentUnit; CurrentCompilationUnit = CurrentUnit;
AddNamespaces(CurrentUnit.ImplementationUsingNamespaceList, CurrentUnit.PossibleNamespaces, true); AddNamespaces(CurrentUnit.ImplementationUsingNamespaceList, CurrentUnit.PossibleNamespaces, true, namespaces);
AddNamespaces(CurrentUnit.ImplementationUsingNamespaceList, GetImplementationSyntaxUsingList(CurrentUnit.SyntaxTree)); AddNamespaces(CurrentUnit.ImplementationUsingNamespaceList, GetImplementationSyntaxUsingList(CurrentUnit.SyntaxTree));
if (!interfcompile) if (!interfcompile)

View file

@ -142,7 +142,7 @@ namespace PascalABCCompiler.NetHelper
string full_ns = null; string full_ns = null;
if (NetHelper.IsNetNamespace(name, _unar, out full_ns) == true) if (NetHelper.IsNetNamespace(name, _unar, out full_ns) == true)
{ {
compiled_namespace_node cnn = new compiled_namespace_node(full_ns, _tcst); compiled_namespace_node cnn = compiled_namespace_node.get_compiled_namespace(full_ns, _tcst);//new compiled_namespace_node(full_ns, _tcst);
si = new SymbolInfoList(new SymbolInfoUnit(cnn)); si = new SymbolInfoList(new SymbolInfoUnit(cnn));
} }
else else

View file

@ -242,7 +242,8 @@ namespace SymbolTable
public class DotNETScope:Scope public class DotNETScope:Scope
{ {
public DotNETScope(DSSymbolTable vSymbolTable):base(vSymbolTable,null,false) public NamespaceScope AdditionalNamespaceScope;
public DotNETScope(DSSymbolTable vSymbolTable):base(vSymbolTable,null,false)
{ {
} }
@ -259,6 +260,7 @@ namespace SymbolTable
} }
public class UnitInterfaceScope:UnitPartScope public class UnitInterfaceScope:UnitPartScope
{ {
public UnitInterfaceScope(DSSymbolTable vSymbolTable,Scope TopScope,Scope[] vTopScopeArray): public UnitInterfaceScope(DSSymbolTable vSymbolTable,Scope TopScope,Scope[] vTopScopeArray):
base(vSymbolTable,TopScope,vTopScopeArray) base(vSymbolTable,TopScope,vTopScopeArray)
{ {

View file

@ -2730,6 +2730,7 @@ namespace PascalABCCompiler.TreeConverter
{ {
if (referenced_units[i] is namespace_unit_node) if (referenced_units[i] is namespace_unit_node)
{ {
namespace_unit_node nun = referenced_units[i] as namespace_unit_node;
for (int j = 0; j < assembly_references.Length; j++) for (int j = 0; j < assembly_references.Length; j++)
{ {
using_namespace_list unl = new using_namespace_list(); using_namespace_list unl = new using_namespace_list();
@ -2739,6 +2740,8 @@ namespace PascalABCCompiler.TreeConverter
} }
if (_compiled_unit != null) if (_compiled_unit != null)
_compiled_unit.used_namespaces.Add((referenced_units[i] as namespace_unit_node).namespace_name.namespace_name); _compiled_unit.used_namespaces.Add((referenced_units[i] as namespace_unit_node).namespace_name.namespace_name);
if (nun.scope != null)
used_units.Add(nun.scope);
} }
else else
{ {
@ -10050,15 +10053,59 @@ namespace PascalABCCompiler.TreeConverter
parent_scope.AddSymbol(names[i], new SymbolInfoUnit(cmn)); parent_scope.AddSymbol(names[i], new SymbolInfoUnit(cmn));
scope.AddSymbol(names[i], new SymbolInfoUnit(cmn)); scope.AddSymbol(names[i], new SymbolInfoUnit(cmn));
if (i == names.Length - 1) if (i == names.Length - 1)
{
dict.Add(_syntax_namespace_node, cmn); dict.Add(_syntax_namespace_node, cmn);
var unit_scope = context.converted_namespace.scope as SymTable.UnitInterfaceScope;
if (unit_scope.TopScopeArray != null)
for (int j = 0; j < unit_scope.TopScopeArray.Length; j++)
{
if (unit_scope.TopScopeArray[j] is NetHelper.NetScope)
{
NetHelper.NetScope netScope = unit_scope.TopScopeArray[j] as NetHelper.NetScope;
if (netScope.used_namespaces.Count > 0 && string.Compare(netScope.used_namespaces[0].namespace_name, _syntax_namespace_node.name, true) == 0)
{
unit_scope.TopScopeArray[j] = scope;
}
}
}
}
} }
else else
{ {
foreach (SymbolInfoUnit si in si_list.InfoUnitList) foreach (SymbolInfoUnit si in si_list.InfoUnitList)
if (si.sym_info is common_namespace_node) if (si.sym_info is common_namespace_node)
{ {
scope = (si.sym_info as common_namespace_node).scope; common_namespace_node cmn = si.sym_info as common_namespace_node;
scope = cmn.scope;
if (!(scope is SymTable.NamespaceScope))
{
if (i == names.Length - 1)
dict.Add(_syntax_namespace_node, cmn);
}
break;
} }
else if (si.sym_info is compiled_namespace_node)
{
List<SymTable.Scope> top_scopes = new List<SymTable.Scope>();
top_scopes.AddRange(build_referenced_units(_syntax_namespace_node.referenced_units, false));
if (parent_scope != context.CurrentScope)
top_scopes.Add(parent_scope);
compiled_namespace_node cnn = si.sym_info as compiled_namespace_node;
if (cnn.common_namespace == null)
{
scope = convertion_data_and_alghoritms.symbol_table.CreateNamespaceScope(top_scopes.ToArray(), parent_scope);
common_namespace_node cmn = new common_namespace_node(null, _compiled_unit, names[i], scope, null);
cnn.common_namespace = cmn;
}
else
scope = cnn.common_namespace.scope;
if (i == names.Length - 1 && !dict.ContainsKey(_syntax_namespace_node))
dict.Add(_syntax_namespace_node, cnn.common_namespace);
}
if (scope == null)
AddError(get_location(_syntax_namespace_node), "NAMESPACE_REDECLARATION");
} }
parent_scope = scope; parent_scope = scope;
} }
@ -10105,7 +10152,7 @@ namespace PascalABCCompiler.TreeConverter
{ {
var cmn = dict[_syntax_namespace_node]; var cmn = dict[_syntax_namespace_node];
List<SymTable.Scope> scopes = new List<SymTable.Scope>(); List<SymTable.Scope> scopes = new List<SymTable.Scope>();
SymTable.NamespaceScope ns_scope = cmn.scope as SymTable.NamespaceScope; SymTable.UnitInterfaceScope ns_scope = cmn.scope as SymTable.UnitInterfaceScope;
if (ns_scope.TopScopeArray != null) if (ns_scope.TopScopeArray != null)
scopes.AddRange(ns_scope.TopScopeArray); scopes.AddRange(ns_scope.TopScopeArray);
foreach (unit_node un in _syntax_namespace_node.referenced_units) foreach (unit_node un in _syntax_namespace_node.referenced_units)
@ -19082,113 +19129,7 @@ namespace PascalABCCompiler.TreeConverter
} }
body_exists = false; body_exists = false;
} }
public void lambda_body_visit(SyntaxTree.block _block)
{
//weak_node_test_and_visit(_block.defs);
//ssyy добавил генерацию вызова конструктора предка без параметров
if (context.converting_block() == block_type.function_block)
{
common_method_node cmn = context.top_function as common_method_node;
if (cmn != null && cmn.is_constructor && !(cmn.polymorphic_state == SemanticTree.polymorphic_state.ps_static))
{
context.allow_inherited_ctor_call = true;
if (_block.program_code != null && _block.program_code.subnodes != null)
{
//(ssyy) Для записей конструктор предка не вызываем.
bool should_ctor_add = context.converted_type.is_class;
if (should_ctor_add)
{
if (_block.program_code.subnodes.Count > 0)
{
SyntaxTree.procedure_call pc = _block.program_code.subnodes[0] as SyntaxTree.procedure_call;
if (pc != null || _block.program_code.subnodes[0] is SyntaxTree.inherited_message)
{
//SyntaxTree.inherited_ident ii = pc.func_name as SyntaxTree.inherited_ident;
//SyntaxTree.method_call mc = pc.func_name as SyntaxTree.method_call;
//SyntaxTree.ident id = pc.func_name as SyntaxTree.ident;
//if (/*ii != null*/id != null || mc != null /*&& mc.dereferencing_value is SyntaxTree.inherited_ident*/)
{
//(ssyy) Не уверен, что следующий оператор необходим.
convertion_data_and_alghoritms.check_node_parser_error(_block.program_code);
statement_node inh = convert_strong(_block.program_code.subnodes[0]);
compiled_constructor_call c1 = inh as compiled_constructor_call;
if (c1 != null && !c1._new_obj_awaited)
{
should_ctor_add = false;
}
else
{
common_constructor_call c2 = inh as common_constructor_call;
if (c2 != null && !c2._new_obj_awaited)
{
should_ctor_add = false;
}
}
}
}
}
}
if (should_ctor_add)
{
//Пытаемся добавить вызов .ctor() предка...
//Для начала проверим, есть ли у предка таковой.
bool not_found = true;
SymbolInfoList sym = context.converted_type.base_type.find_in_type(compiler_string_consts.default_constructor_name, context.CurrentScope);
if (sym != null)
{
foreach (SymbolInfoUnit sym_unit in sym.InfoUnitList)
{
if (!not_found)
break;
compiled_constructor_node ccn = sym_unit.sym_info as compiled_constructor_node;
if (ccn != null && ccn.parameters.Count == 0)
{
not_found = false;
}
else
{
common_method_node cnode = sym_unit.sym_info as common_method_node;
if (cnode != null && cnode.is_constructor && (cnode.parameters.Count == 0 || cnode.parameters[0].default_value != null))
{
not_found = false;
}
}
}
}
if (not_found)
{
//У предка нет конструктора по умолчанию
AddError(get_location(_block.program_code), "INHERITED_CONSTRUCTOR_CALL_EXPECTED");
}
else
{
//Генерируем вызов .ctor() предка
SyntaxTree.inherited_ident ii = new SyntaxTree.inherited_ident();
ii.name = compiler_string_consts.default_constructor_name;
_block.program_code.subnodes.Insert(0, new SyntaxTree.procedure_call(ii));
//context.allow_inherited_ctor_call = false;
}
}
}
}
}
//\ssyy
//ssyy
if (context.converting_block() == block_type.namespace_block)
{
context.check_predefinition_defined();
}
context.enter_code_block_with_bind();
statement_node sn = convert_strong(_block.program_code);
context.leave_code_block();
context.code = sn;
}
public override void visit(SyntaxTree.lambda_inferred_type lit) //lroman// public override void visit(SyntaxTree.lambda_inferred_type lit) //lroman//
{ {

View file

@ -585,6 +585,7 @@ namespace PascalABCCompiler.TreeRealization
/// Имя (полное) пространства имен. /// Имя (полное) пространства имен.
/// </summary> /// </summary>
private string _name; private string _name;
private common_namespace_node _common_namespace;
private SymbolTable.TreeConverterSymbolTable _tcst; private SymbolTable.TreeConverterSymbolTable _tcst;
@ -613,6 +614,19 @@ namespace PascalABCCompiler.TreeRealization
return new string(_name.ToCharArray(last_dot_ind,_name.Length-last_dot_ind)); return new string(_name.ToCharArray(last_dot_ind,_name.Length-last_dot_ind));
} }
private static Dictionary<string, compiled_namespace_node> compiled_namespaces = new Dictionary<string, compiled_namespace_node>();
public static compiled_namespace_node get_compiled_namespace(string full_name, SymbolTable.TreeConverterSymbolTable tcst)
{
compiled_namespace_node cnn = null;
if (!compiled_namespaces.TryGetValue(full_name, out cnn))
{
cnn = new compiled_namespace_node(full_name, tcst);
compiled_namespaces.Add(full_name, cnn);
}
cnn._tcst = tcst;
return cnn;
}
/// <summary> /// <summary>
/// Имя пространства имен (не полное). /// Имя пространства имен (не полное).
/// </summary> /// </summary>
@ -635,6 +649,18 @@ namespace PascalABCCompiler.TreeRealization
} }
} }
public common_namespace_node common_namespace
{
get
{
return _common_namespace;
}
set
{
_common_namespace = value;
}
}
/// <summary> /// <summary>
/// Поиск символа в пространстве имен. /// Поиск символа в пространстве имен.
/// </summary> /// </summary>
@ -644,15 +670,21 @@ namespace PascalABCCompiler.TreeRealization
{ {
bool is_ns = NetHelper.NetHelper.IsNetNamespace(_name + "." + name); bool is_ns = NetHelper.NetHelper.IsNetNamespace(_name + "." + name);
SymbolInfoList si = null; SymbolInfoList si = null;
if (is_ns == true) if (is_ns)
{ {
compiled_namespace_node cnn = new compiled_namespace_node(_name + "." + name,_tcst); compiled_namespace_node cnn = compiled_namespace_node.get_compiled_namespace(_name + "." + name, _tcst);
si = new SymbolInfoList(new SymbolInfoUnit(cnn)); si = new SymbolInfoList(new SymbolInfoUnit(cnn));
} }
else else
{ {
//Kolay changed next string. throwOnError=false ignoreCase=true, . //Kolay changed next string. throwOnError=false ignoreCase=true, .
//Type t = Type.GetType(_name+"."+name,false,true); //Type t = Type.GetType(_name+"."+name,false,true);
if (common_namespace != null)
{
si = common_namespace.scope.FindOnlyInScope(name);
if (si != null)
return si;
}
Type t = NetHelper.NetHelper.FindType(_name + "." + name); Type t = NetHelper.NetHelper.FindType(_name + "." + name);
if (t != null) if (t != null)
{ {

View file

@ -24,6 +24,7 @@ namespace PascalABCCompiler.TreeRealization
public class namespace_unit_node : unit_node public class namespace_unit_node : unit_node
{ {
public using_namespace namespace_name; public using_namespace namespace_name;
public SymbolTable.Scope scope;
public namespace_unit_node(using_namespace namespace_name) public namespace_unit_node(using_namespace namespace_name)
{ {
this.namespace_name = namespace_name; this.namespace_name = namespace_name;

View file

@ -29,108 +29,112 @@ namespace VisualPascalABC
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("PRJ_UNIT", 0); System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("PRJ_UNIT", 0);
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("PRJ_FORM", 1); System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("PRJ_FORM", 1);
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewFileForm)); System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("PRJ_NAMESPACE", 0);
this.lvTemplates = new System.Windows.Forms.ListView(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewFileForm));
this.imageList1 = new System.Windows.Forms.ImageList(this.components); this.lvTemplates = new System.Windows.Forms.ListView();
this.label1 = new System.Windows.Forms.Label(); this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.label2 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label();
this.tbFileName = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label();
this.btnAdd = new System.Windows.Forms.Button(); this.tbFileName = new System.Windows.Forms.TextBox();
this.btnCancel = new System.Windows.Forms.Button(); this.btnAdd = new System.Windows.Forms.Button();
this.SuspendLayout(); this.btnCancel = new System.Windows.Forms.Button();
// this.SuspendLayout();
// lvTemplates //
// // lvTemplates
this.lvTemplates.HideSelection = false; //
this.lvTemplates.HoverSelection = true; this.lvTemplates.HideSelection = false;
listViewItem1.Tag = "0"; this.lvTemplates.HoverSelection = true;
listViewItem2.Tag = "1"; listViewItem1.Tag = "0";
this.lvTemplates.Items.AddRange(new System.Windows.Forms.ListViewItem[] { listViewItem2.Tag = "1";
listViewItem1, listViewItem3.Tag = "2";
listViewItem2}); this.lvTemplates.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
this.lvTemplates.LargeImageList = this.imageList1; listViewItem1,
this.lvTemplates.Location = new System.Drawing.Point(1, 30); listViewItem2,
this.lvTemplates.Name = "lvTemplates"; listViewItem3});
this.lvTemplates.Size = new System.Drawing.Size(372, 196); this.lvTemplates.LargeImageList = this.imageList1;
this.lvTemplates.TabIndex = 0; this.lvTemplates.Location = new System.Drawing.Point(1, 30);
this.lvTemplates.UseCompatibleStateImageBehavior = false; this.lvTemplates.Name = "lvTemplates";
// this.lvTemplates.Size = new System.Drawing.Size(372, 196);
// imageList1 this.lvTemplates.TabIndex = 0;
// this.lvTemplates.UseCompatibleStateImageBehavior = false;
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); //
this.imageList1.TransparentColor = System.Drawing.Color.Transparent; // imageList1
this.imageList1.Images.SetKeyName(0, "Icons.32x32.Unit.png"); //
this.imageList1.Images.SetKeyName(1, "Icons.32x32.Form.png"); this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
// this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
// label1 this.imageList1.Images.SetKeyName(0, "Icons.32x32.Unit.png");
// this.imageList1.Images.SetKeyName(1, "Icons.32x32.Form.png");
this.label1.Location = new System.Drawing.Point(1, 9); //
this.label1.Name = "label1"; // label1
this.label1.Size = new System.Drawing.Size(100, 23); //
this.label1.TabIndex = 1; this.label1.Location = new System.Drawing.Point(1, 9);
this.label1.Text = "PRJ_TEMPLATES"; this.label1.Name = "label1";
// this.label1.Size = new System.Drawing.Size(100, 23);
// label2 this.label1.TabIndex = 1;
// this.label1.Text = "PRJ_TEMPLATES";
this.label2.Location = new System.Drawing.Point(1, 241); //
this.label2.Name = "label2"; // label2
this.label2.Size = new System.Drawing.Size(100, 23); //
this.label2.TabIndex = 2; this.label2.Location = new System.Drawing.Point(1, 241);
this.label2.Text = "PRJ_FILE_NAME"; this.label2.Name = "label2";
// this.label2.Size = new System.Drawing.Size(100, 23);
// tbFileName this.label2.TabIndex = 2;
// this.label2.Text = "PRJ_FILE_NAME";
this.tbFileName.Location = new System.Drawing.Point(86, 241); //
this.tbFileName.Name = "tbFileName"; // tbFileName
this.tbFileName.Size = new System.Drawing.Size(287, 20); //
this.tbFileName.TabIndex = 3; this.tbFileName.Location = new System.Drawing.Point(86, 241);
// this.tbFileName.Name = "tbFileName";
// btnAdd this.tbFileName.Size = new System.Drawing.Size(287, 20);
// this.tbFileName.TabIndex = 3;
this.btnAdd.DialogResult = System.Windows.Forms.DialogResult.OK; //
this.btnAdd.Location = new System.Drawing.Point(183, 280); // btnAdd
this.btnAdd.Name = "btnAdd"; //
this.btnAdd.Size = new System.Drawing.Size(95, 23); this.btnAdd.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnAdd.TabIndex = 4; this.btnAdd.Location = new System.Drawing.Point(183, 280);
this.btnAdd.Text = "RF_OK"; this.btnAdd.Name = "btnAdd";
this.btnAdd.UseVisualStyleBackColor = true; this.btnAdd.Size = new System.Drawing.Size(95, 23);
// this.btnAdd.TabIndex = 4;
// btnCancel this.btnAdd.Text = "RF_OK";
// this.btnAdd.UseVisualStyleBackColor = true;
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; //
this.btnCancel.Location = new System.Drawing.Point(292, 280); // btnCancel
this.btnCancel.Name = "btnCancel"; //
this.btnCancel.Size = new System.Drawing.Size(81, 23); this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.TabIndex = 5; this.btnCancel.Location = new System.Drawing.Point(292, 280);
this.btnCancel.Text = "RF_CANCEL"; this.btnCancel.Name = "btnCancel";
this.btnCancel.UseVisualStyleBackColor = true; this.btnCancel.Size = new System.Drawing.Size(81, 23);
// this.btnCancel.TabIndex = 5;
// NewFileForm this.btnCancel.Text = "RF_CANCEL";
// this.btnCancel.UseVisualStyleBackColor = true;
this.AcceptButton = this.btnAdd; //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); // NewFileForm
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; //
this.CancelButton = this.btnCancel; this.AcceptButton = this.btnAdd;
this.ClientSize = new System.Drawing.Size(385, 315); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.Controls.Add(this.btnCancel); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.btnAdd); this.CancelButton = this.btnCancel;
this.Controls.Add(this.tbFileName); this.ClientSize = new System.Drawing.Size(385, 315);
this.Controls.Add(this.lvTemplates); this.Controls.Add(this.btnCancel);
this.Controls.Add(this.label1); this.Controls.Add(this.btnAdd);
this.Controls.Add(this.label2); this.Controls.Add(this.tbFileName);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Controls.Add(this.lvTemplates);
this.MaximizeBox = false; this.Controls.Add(this.label1);
this.MinimizeBox = false; this.Controls.Add(this.label2);
this.Name = "NewFileForm"; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.ShowInTaskbar = false; this.MaximizeBox = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.MinimizeBox = false;
this.Text = "PRJ_NEW_FILE"; this.Name = "NewFileForm";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NewFileFormFormClosing); this.ShowInTaskbar = false;
this.ResumeLayout(false); this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.PerformLayout(); this.Text = "PRJ_NEW_FILE";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NewFileFormFormClosing);
this.ResumeLayout(false);
this.PerformLayout();
} }
private System.Windows.Forms.ListView lvTemplates; private System.Windows.Forms.ListView lvTemplates;
private System.Windows.Forms.ImageList imageList1; private System.Windows.Forms.ImageList imageList1;

View file

@ -9,6 +9,8 @@ using System.Windows.Forms;
namespace VisualPascalABC namespace VisualPascalABC
{ {
public enum FileType { Unit, Namespace, Form}
/// <summary> /// <summary>
/// Description of NewFileForm. /// Description of NewFileForm.
/// </summary> /// </summary>
@ -23,7 +25,7 @@ namespace VisualPascalABC
foreach (ListViewItem li in lvTemplates.Items) foreach (ListViewItem li in lvTemplates.Items)
{ {
if ((string)li.Tag == "0") if ((string)li.Tag == "0" || (string)li.Tag == "2")
source_items.Add(li); source_items.Add(li);
else else
forms_items.Add(li); forms_items.Add(li);
@ -107,6 +109,15 @@ namespace VisualPascalABC
lvTemplates.Items[0].Selected = true; lvTemplates.Items[0].Selected = true;
} }
public FileType GetFileFilter()
{
if ((string)lvTemplates.SelectedItems[0].Tag == "0")
return FileType.Unit;
else if ((string)lvTemplates.SelectedItems[0].Tag == "2")
return FileType.Namespace;
return FileType.Form;
}
public Button CancelButtonCommon public Button CancelButtonCommon
{ {
get get

View file

@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACm ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACm
DAAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo DAAAAk1TRnQBSQFMAgEBAgEAARQBAAEUAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

View file

@ -49,26 +49,26 @@ namespace VisualPascalABC
return Path.GetDirectoryName(currentProject.Path); return Path.GetDirectoryName(currentProject.Path);
} }
} }
public PascalABCCompiler.IProjectInfo CreateProject(string projectName, string projectFileName, PascalABCCompiler.ProjectType projectType) public PascalABCCompiler.IProjectInfo CreateProject(string projectName, string projectFileName, PascalABCCompiler.ProjectType projectType)
{ {
currentProject = new PascalABCCompiler.ProjectInfo(); currentProject = new PascalABCCompiler.ProjectInfo();
currentProject.name = projectName; currentProject.name = projectName;
currentProject.path = projectFileName; currentProject.path = projectFileName;
string dir = Path.GetDirectoryName(projectFileName); string dir = Path.GetDirectoryName(projectFileName);
if (!Directory.Exists(dir)) if (!Directory.Exists(dir))
{ {
Directory.CreateDirectory(dir); Directory.CreateDirectory(dir);
} }
currentProject.include_debug_info = true; currentProject.include_debug_info = true;
currentProject.project_type = projectType; currentProject.project_type = projectType;
currentProject.source_files.Add(new PascalABCCompiler.SourceCodeFileInfo(projectName+".pas",Path.Combine(dir,projectName+".pas"))); currentProject.source_files.Add(new PascalABCCompiler.SourceCodeFileInfo(projectName + ".pas", Path.Combine(dir, projectName + ".pas")));
currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System","System.dll")); currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System", "System.dll"));
if (projectType == PascalABCCompiler.ProjectType.WindowsApp) if (projectType == PascalABCCompiler.ProjectType.WindowsApp)
{ {
currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Windows.Forms","System.Windows.Forms.dll")); currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Windows.Forms", "System.Windows.Forms.dll"));
currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Drawing","System.Drawing.dll")); currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Drawing", "System.Drawing.dll"));
//roman// //roman//
currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Core", "System.Core.dll")); currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Core", "System.Core.dll"));
currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Data", "System.Data.dll")); currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Data", "System.Data.dll"));
@ -76,42 +76,42 @@ namespace VisualPascalABC
currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Xml", "System.Xml.dll")); currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Xml", "System.Xml.dll"));
currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Xml.Linq", "System.Xml.Linq.dll")); currentProject.references.Add(new PascalABCCompiler.ReferenceInfo("System.Xml.Linq", "System.Xml.Linq.dll"));
//roman// //roman//
} }
currentProject.main_file = Path.Combine(dir,projectName+".pas"); currentProject.main_file = Path.Combine(dir, projectName + ".pas");
currentProject.generate_xml_doc = false; currentProject.generate_xml_doc = false;
currentProject.delete_exe = true; currentProject.delete_exe = true;
currentProject.delete_pdb = true; currentProject.delete_pdb = true;
currentProject.major_version = 0; currentProject.major_version = 0;
currentProject.minor_version = 0; currentProject.minor_version = 0;
currentProject.build_version = 0; currentProject.build_version = 0;
currentProject.revision_version = 0; currentProject.revision_version = 0;
currentProject.output_directory = dir; currentProject.output_directory = dir;
StreamWriter sw = File.CreateText(Path.Combine(dir,projectName+".pas")); StreamWriter sw = File.CreateText(Path.Combine(dir, projectName + ".pas"));
currentProject.output_file_name = projectName + ".exe"; currentProject.output_file_name = projectName + ".exe";
if (projectType == PascalABCCompiler.ProjectType.ConsoleApp) if (projectType == PascalABCCompiler.ProjectType.ConsoleApp)
{ {
//sw.WriteLine("program "+projectName+";"); //sw.WriteLine("program "+projectName+";");
//sw.WriteLine(); //sw.WriteLine();
//sw.WriteLine("uses System;"); //sw.WriteLine("uses System;");
//sw.WriteLine(); //sw.WriteLine();
sw.WriteLine("begin"); sw.WriteLine("begin");
sw.WriteLine(); sw.WriteLine();
sw.WriteLine("end."); sw.Write("end.");
} }
else if (projectType == PascalABCCompiler.ProjectType.Library) else if (projectType == PascalABCCompiler.ProjectType.Library)
{ {
sw.WriteLine("library "+projectName+";"); sw.WriteLine("library " + projectName + ";");
sw.WriteLine(); sw.WriteLine();
//sw.WriteLine("uses System;"); //sw.WriteLine("uses System;");
//sw.WriteLine(); //sw.WriteLine();
sw.WriteLine("end."); sw.Write("end.");
currentProject.output_file_name = projectName + ".dll"; currentProject.output_file_name = projectName + ".dll";
} }
sw.Close(); sw.Close();
currentProject.Save(); currentProject.Save();
//VisualPABCSingleton.MainForm.OpenFile(Path.Combine(dir,projectName+".pas")); //VisualPABCSingleton.MainForm.OpenFile(Path.Combine(dir,projectName+".pas"));
return currentProject; return currentProject;
} }
public PascalABCCompiler.IProjectInfo OpenProject(string projectFileName) public PascalABCCompiler.IProjectInfo OpenProject(string projectFileName)
{ {
@ -150,22 +150,52 @@ namespace VisualPascalABC
} }
} }
} }
public PascalABCCompiler.IFileInfo AddSourceFile(string file_name) public PascalABCCompiler.IFileInfo AddSourceFile(string fileName)
{ {
PascalABCCompiler.SourceCodeFileInfo fi = new PascalABCCompiler.SourceCodeFileInfo(file_name,Path.Combine(Path.GetDirectoryName(currentProject.Path),file_name)); PascalABCCompiler.SourceCodeFileInfo fi = new PascalABCCompiler.SourceCodeFileInfo(fileName, Path.Combine(Path.GetDirectoryName(currentProject.Path), fileName));
currentProject.source_files.Add(fi); currentProject.source_files.Add(fi);
Dirty = true; Dirty = true;
return fi; return fi;
} }
public PascalABCCompiler.IReferenceInfo AddReference(string s) public void AddNamespaceFileReference(string fileName)
{ {
PascalABCCompiler.ReferenceInfo ri = new PascalABCCompiler.ReferenceInfo(s,s+".dll"); var text = WorkbenchServiceFactory.Workbench.VisualEnvironmentCompiler.SourceFilesProvider(currentProject.main_file, PascalABCCompiler.SourceFileOperation.GetText) as string;
currentProject.references.Add(ri); text = "{$includenamespace " + Path.GetFileName(fileName) + "}"+Environment.NewLine + text;
Dirty = true; var doc = WorkbenchServiceFactory.DocumentService.GetDocument(currentProject.main_file);
return ri; if (doc != null)
} {
doc.TextEditor.Text = text;
}
else
{
File.WriteAllText(currentProject.main_file, text);
}
}
public void RemoveNamespaceFileReference(string fileName)
{
var text = WorkbenchServiceFactory.Workbench.VisualEnvironmentCompiler.SourceFilesProvider(currentProject.main_file, PascalABCCompiler.SourceFileOperation.GetText) as string;
text = text.Replace("{$includenamespace " + Path.GetFileName(fileName) + "}"+Environment.NewLine,"");
var doc = WorkbenchServiceFactory.DocumentService.GetDocument(currentProject.main_file);
if (doc != null)
{
doc.TextEditor.Text = text;
}
else
{
File.WriteAllText(currentProject.main_file, text);
}
}
public PascalABCCompiler.IReferenceInfo AddReference(string s)
{
PascalABCCompiler.ReferenceInfo ri = new PascalABCCompiler.ReferenceInfo(s, s + ".dll");
currentProject.references.Add(ri);
Dirty = true;
return ri;
}
public void RemoveReference(PascalABCCompiler.IReferenceInfo ri) public void RemoveReference(PascalABCCompiler.IReferenceInfo ri)
{ {
@ -189,11 +219,11 @@ namespace VisualPascalABC
{ {
return "Unit"+uid++ + ".pas"; return "Unit"+uid++ + ".pas";
} }
public string GetFullUnitFileName() public string GetFullUnitFileName()
{ {
return Path.Combine(Path.GetDirectoryName(currentProject.path),GetUnitFileName()); return Path.Combine(Path.GetDirectoryName(currentProject.path), GetUnitFileName());
} }
public void SaveProject() public void SaveProject()
{ {

View file

@ -99,14 +99,25 @@ namespace VisualPascalABC
PascalABCCompiler.IFileInfo fi = ProjectFactory.Instance.AddSourceFile(frm.FileName); PascalABCCompiler.IFileInfo fi = ProjectFactory.Instance.AddSourceFile(frm.FileName);
ProjectExplorerWindow.AddSourceFile(fi,false); ProjectExplorerWindow.AddSourceFile(fi,false);
string full_file_name = Path.Combine(Path.GetDirectoryName(ProjectFactory.Instance.CurrentProject.Path),frm.FileName); string full_file_name = Path.Combine(Path.GetDirectoryName(ProjectFactory.Instance.CurrentProject.Path),frm.FileName);
StreamWriter sw = File.CreateText(full_file_name); StreamWriter sw = File.CreateText(full_file_name);
sw.WriteLine("unit "+Path.GetFileNameWithoutExtension(frm.FileName)+";"); if (frm.GetFileFilter() == FileType.Unit)
sw.WriteLine(); {
sw.WriteLine("interface"); sw.WriteLine("unit " + Path.GetFileNameWithoutExtension(frm.FileName) + ";");
sw.WriteLine(); sw.WriteLine();
sw.WriteLine("implementation"); sw.WriteLine("interface");
sw.WriteLine(); sw.WriteLine();
sw.WriteLine("end."); sw.WriteLine("implementation");
sw.WriteLine();
sw.Write("end.");
}
else
{
sw.WriteLine("namespace "+ProjectFactory.Instance.CurrentProject.Name+";");
sw.WriteLine();
sw.Write("end.");
ProjectFactory.Instance.AddNamespaceFileReference(full_file_name);
}
sw.Close(); sw.Close();
WorkbenchServiceFactory.FileService.OpenFile(full_file_name, null); WorkbenchServiceFactory.FileService.OpenFile(full_file_name, null);
} }
@ -199,6 +210,7 @@ namespace VisualPascalABC
public static void ExcludeFile(PascalABCCompiler.IFileInfo fi) public static void ExcludeFile(PascalABCCompiler.IFileInfo fi)
{ {
ProjectFactory.Instance.ExcludeFile(fi); ProjectFactory.Instance.ExcludeFile(fi);
ProjectFactory.Instance.RemoveNamespaceFileReference(fi.Path);
} }
private static TypeLibConverter type_conv = new TypeLibConverter(); private static TypeLibConverter type_conv = new TypeLibConverter();

View file

@ -130,6 +130,7 @@ GOTO_AND_LAMBDAS_NOT_ALLOWED=Cannot use 'goto' and lambdas in the same function
NO_PROPERTY_TO_OVERRIDE=No property to override NO_PROPERTY_TO_OVERRIDE=No property to override
TYPE_PREDEFINITION_NOT_ALLOWED=Type predefinition in namespaces TYPE_PREDEFINITION_NOT_ALLOWED=Type predefinition in namespaces
NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES=class, record, enumeration type or functional type expected NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES=class, record, enumeration type or functional type expected
NAMESPACE_REDECLARATION=Namespaces cannot be the same as the names of units or .NET namespaces
%PREFIX%=COMPILATIONERROR_ %PREFIX%=COMPILATIONERROR_
UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Unit expected, library found UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Unit expected, library found
ASSEMBLY_{0}_READING_ERROR=Error by reading assembly '{0}' ASSEMBLY_{0}_READING_ERROR=Error by reading assembly '{0}'

View file

@ -333,6 +333,7 @@ PRJ_TRADEMARK=Trademark
PRJ_COPYRIGHT=Copyright PRJ_COPYRIGHT=Copyright
PRJ_GENERATE_XML_DOC=Generate XML doc PRJ_GENERATE_XML_DOC=Generate XML doc
PRJ_NUGET=NuGet PRJ_NUGET=NuGet
PRJ_NAMESPACE=Namespace
NUGET_PACKAGE=Package Id NUGET_PACKAGE=Package Id
NUGET_INSTALL=Install package NUGET_INSTALL=Install package
NUGET_LOG=Log NUGET_LOG=Log

View file

@ -125,6 +125,7 @@ GOTO_AND_LAMBDAS_NOT_ALLOWED=Недопустимо совместное исп
NO_PROPERTY_TO_OVERRIDE=Нет свойства для переопределения NO_PROPERTY_TO_OVERRIDE=Нет свойства для переопределения
TYPE_PREDEFINITION_NOT_ALLOWED=Предописание типов в пространствах имен недопустимо TYPE_PREDEFINITION_NOT_ALLOWED=Предописание типов в пространствах имен недопустимо
NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES=В пространство имен можно описывать только классы, записи, перечислимые и процедурные типы NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES=В пространство имен можно описывать только классы, записи, перечислимые и процедурные типы
NAMESPACE_REDECLARATION=Пространства имен не должны совпадать с именами модулей и пространств .NET
%PREFIX%=COMPILATIONERROR_ %PREFIX%=COMPILATIONERROR_
UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Ожидался модуль, а встречена библиотека UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Ожидался модуль, а встречена библиотека
ASSEMBLY_{0}_READING_ERROR=Ошибка при чтении сборки '{0}' ASSEMBLY_{0}_READING_ERROR=Ошибка при чтении сборки '{0}'

View file

@ -333,6 +333,7 @@ PRJ_TRADEMARK=Торговая марка
PRJ_COPYRIGHT=Copyright PRJ_COPYRIGHT=Copyright
PRJ_GENERATE_XML_DOC=Генерировать XML документацию PRJ_GENERATE_XML_DOC=Генерировать XML документацию
PRJ_NUGET=NuGet PRJ_NUGET=NuGet
PRJ_NAMESPACE=Пространство имен
NUGET_PACKAGE=Идентификатор пакета NUGET_PACKAGE=Идентификатор пакета
NUGET_INSTALL=Установить пакет NUGET_INSTALL=Установить пакет
NUGET_LOG=Лог NUGET_LOG=Лог