Skip to content
Merged

V1.5.7 #2051

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
a41d44b
WI #1990 Fix type comparison in procedure call checker (#1993)
fm-117 Jul 1, 2021
cbe64a8
WI #1997 Always create code element for ACCEPT statement (#1998)
fm-117 Jul 9, 2021
41be281
WI #1926 Correct duplicate diagnostics on CALL using special register…
delevoye Jul 12, 2021
1a4d2a4
WI #1992 Ensure correct token types are used for AlphanumericValue (#…
fm-117 Jul 15, 2021
2ca4582
WI #2007 Enable optional diagnostics for CFG (#2008)
fm-117 Jul 27, 2021
e0d65ad
WI #2014 Add basic dominator algorithms (#2015)
mayanje Jul 28, 2021
5d990e8
WI #2011 Add -now --nowatchers options (#2013)
mayanje Jul 28, 2021
d075552
WI #2009 Bad assign DiagnosticsDetected elsewhere (#2010)
mayanje Jul 28, 2021
ceda343
WI #2005 Convert ClassCondition.DataItem to ConditionalOperand (#2006)
delevoye Jul 29, 2021
2a21fef
WI #2000 Add resolved paragraphs and sections to Sort node (#2003)
delevoye Jul 29, 2021
0b45cc3
WI #400 Check literals used as subscripts (#2004)
fm-117 Jul 29, 2021
58c1577
WI #1911 Implement advanced PICTURE string validation (#2020)
fm-117 Aug 4, 2021
5d35944
WI #2012 Add diagnostic on MOVE from PIC X to Numeric with usage (#2017)
delevoye Aug 5, 2021
e864f00
WI #1985 Add -cpyr option (#1986)
mayanje Aug 9, 2021
8312290
WI #1975 Add cpyCopies field (#1979)
mayanje Aug 10, 2021
d5563bf
WI #1916 Check WHEN condition in binary SEARCH statements (#2021)
fm-117 Aug 16, 2021
aea6c3c
WI #2016 Implement unreachable code detection (#2023)
fm-117 Aug 17, 2021
98f2633
WI #1917 Improve error messages on unexpected dots (#2025)
fm-117 Aug 19, 2021
1e0c13c
WI #1834 Upgrade to .NET Framework 4.7.2 (#2029)
fm-117 Aug 19, 2021
f294bd6
WI #1991 Check reference modifiers literals (#2033)
delevoye Aug 24, 2021
1e49d0c
WI #1847 secure external analyzers (#2034)
delevoye Sep 3, 2021
fc2429b
WI #1846 Multi line diagnostics (#2036)
delevoye Sep 3, 2021
94208b4
WI #2026 #2027 Avoid FileCompiler leaks in LanguageServer (#2030)
fm-117 Sep 6, 2021
387663b
2022 abstract int multi branch context (#2024)
mayanje Sep 24, 2021
e20facd
WI #2035 Remove semantic domain type flags (#2038)
fm-117 Sep 27, 2021
84a21a0
WI #2040 Fix subscript value checking (#2041)
fm-117 Oct 7, 2021
e2893cc
WI #2046 Find various NullReferenceException (#2049)
mayanje Oct 19, 2021
041e5c2
WI #2037 Avoid creating CE diagnostics after CE build phase (#2043)
fm-117 Oct 19, 2021
08d2acb
Merge branch 'master' into v1.5.7
mayanje Oct 19, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions Analytics/packages.config
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Elasticsearch.Net" version="7.5.1" targetFramework="net47" />
<package id="NLog" version="4.7.2" targetFramework="net47" />
<package id="System.Buffers" version="4.5.0" targetFramework="net47" />
<package id="System.Diagnostics.DiagnosticSource" version="4.7.0" targetFramework="net47" />
<package id="System.Memory" version="4.5.3" targetFramework="net47" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net47" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.0" targetFramework="net47" />
<package id="Elasticsearch.Net" version="7.5.1" targetFramework="net472" />
<package id="NLog" version="4.7.2" targetFramework="net472" />
<package id="System.Buffers" version="4.5.0" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="4.7.0" targetFramework="net472" />
<package id="System.Memory" version="4.5.3" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.0" targetFramework="net472" />
</packages>
85 changes: 73 additions & 12 deletions CLI/src/CLI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,7 @@ internal static ReturnCode runOnce(TypeCobolConfiguration config)
debugLine += Path.GetFileName(config.InputFiles[0]);
}
debugLine += "\n";
//Use user-defined log path if -log option used, otherwise use default location for log file
File.AppendAllText(config.LogFile ?? TypeCobolConfiguration.DefaultLogFileName, debugLine);
Logger(config, debugLine);
Console.WriteLine(debugLine);
TextWriter textWriter = config.ErrorFile == null ? Console.Error : File.CreateText(config.ErrorFile);
AbstractErrorWriter errorWriter;
Expand Down Expand Up @@ -84,8 +83,7 @@ internal static ReturnCode runOnce(TypeCobolConfiguration config)

stopWatch.Stop();
debugLine = " parsed in " + stopWatch.Elapsed + " ms\n";
//Use user-defined log path if -log option used, otherwise use default location for log file
File.AppendAllText(config.LogFile ?? TypeCobolConfiguration.DefaultLogFileName, debugLine);
Logger(config, debugLine);
Console.WriteLine(debugLine);

AnalyticsWrapper.Telemetry.TrackMetricsEvent(EventType.Duration, LogType.Genration, "ExecutionTime", stopWatch.Elapsed.Milliseconds);
Expand Down Expand Up @@ -122,11 +120,11 @@ private ReturnCode Compile()
var rootSymbolTable = LoadIntrinsicsAndDependencies();

//Add analyzers
var analyzerProvider = new CompositeAnalyzerProvider();
var analyzerProvider = new AnalyzerProviderWrapper(str => Logger(_configuration, str));
var reports = RegisterAnalyzers(analyzerProvider);

//Add external analyzers
analyzerProvider.AddCustomProviders(_configuration.CustomAnalyzerFiles);
analyzerProvider.AddCustomProviders(_configuration.CustomAnalyzerFiles, str => Logger(_configuration, str));

//Normalize TypeCobolOptions, the parser does not need to go beyond SemanticCheck for the first phase
var typeCobolOptions = new TypeCobolOptions(_configuration);
Expand Down Expand Up @@ -199,10 +197,24 @@ private ReturnCode Compile()
//Write used and missing copies files
WriteCopiesFile(_configuration.ExtractedCopiesFilePath, _usedCopies);
WriteCopiesFile(_configuration.HaltOnMissingCopyFilePath, _missingCopies);
#if EUROINFO_RULES
WriteUsedCopiesFile();
#endif

return AddErrorsAndComputeReturnCode();
}

/// <summary>
/// Log a string in the LogFile provided by the configuration.
/// </summary>
/// <param name="config">Configuration containing the log file.</param>
/// <param name="message">String to log.</param>
private static void Logger(TypeCobolConfiguration config, string message)
{
//Use user-defined log path if -log option used, otherwise use default location for log file
File.AppendAllText(config.LogFile ?? TypeCobolConfiguration.DefaultLogFileName, message);
}

private SymbolTable LoadIntrinsicsAndDependencies()
{
var intrinsicsAndDependenciesParser = new Parser();
Expand Down Expand Up @@ -251,21 +263,21 @@ private void CollectMissingCopies(IEnumerable<string> missingCopies)
}
}

private Dictionary<string, IReport> RegisterAnalyzers(AnalyzerProvider analyzerProvider)
private Dictionary<string, IReport> RegisterAnalyzers(AnalyzerProviderWrapper analyzerProviderWrapper)
{
var reports = new Dictionary<string, IReport>();
if (_configuration.ExecToStep >= ExecutionStep.CrossCheck)
{
//All purpose CFG/DFA
analyzerProvider.AddActivator((o, t) => CfgDfaAnalyzerFactory.CreateCfgAnalyzer(_configuration.CfgBuildingMode));
analyzerProviderWrapper.AddActivator((o, t) => CfgDfaAnalyzerFactory.CreateCfgAnalyzer(_configuration.CfgBuildingMode, o));

//CFG/DFA for ZCALL report
if (!string.IsNullOrEmpty(_configuration.ReportZCallFilePath))
{
if (_configuration.CfgBuildingMode != CfgBuildingMode.WithDfa)
{
//Need to create a dedicated CFG builder with DFA activated
analyzerProvider.AddActivator((o, t) => CfgDfaAnalyzerFactory.CreateCfgAnalyzer(CfgBuildingMode.WithDfa));
analyzerProviderWrapper.AddActivator((o, t) => CfgDfaAnalyzerFactory.CreateCfgAnalyzer(CfgBuildingMode.WithDfa, o));
}

string zCallCfgDfaId = CfgDfaAnalyzerFactory.GetIdForMode(CfgBuildingMode.WithDfa);
Expand All @@ -276,7 +288,7 @@ private Dictionary<string, IReport> RegisterAnalyzers(AnalyzerProvider analyzerP
//CopyMoveInitializeReport
if (!string.IsNullOrEmpty(_configuration.ReportCopyMoveInitializeFilePath))
{
analyzerProvider.AddActivator(
analyzerProviderWrapper.AddActivator(
(o, t) =>
{
var report = new CopyMoveInitializeReport();
Expand Down Expand Up @@ -461,6 +473,42 @@ private void WriteCopiesFile(string copiesFilePath, IEnumerable<string> copies)
}
}

#if EUROINFO_RULES
private void WriteUsedCopiesFile()
{
if (_configuration.ReportUsedCopyNamesPath != null)
{
using (var output = File.CreateText(_configuration.ReportUsedCopyNamesPath))
{
foreach (var parserResult in _parserResults)
{
string fileName = Path.GetFileNameWithoutExtension(parserResult.Key);
var usedCopies = parserResult.Value.CollectedCopyNames;

if (usedCopies == null)
{
output.WriteLine(fileName);
continue;
}

foreach (var usedCopy in usedCopies)
{
output.Write(fileName);
output.Write(';');
output.Write(usedCopy.Key);
foreach (var suffixedName in usedCopy.Value)
{
output.Write(';');
output.Write(suffixedName);
}
output.WriteLine();
}
}
}
}
}
#endif

private ReturnCode AddErrorsAndComputeReturnCode()
{
/*
Expand Down Expand Up @@ -513,7 +561,7 @@ private ReturnCode AddErrorsAndComputeReturnCode()
if (generationException.Logged)
{
string message = generationException.Message + Environment.NewLine + generationException.StackTrace;
var position = new Diagnostic.Position(generationException.LineNumber, generationException.ColumnStartIndex, generationException.ColumnEndIndex, null);
var position = new Diagnostic.Position(generationException.LineNumber, generationException.ColumnStartIndex, generationException.LineNumber, generationException.ColumnEndIndex, null);
Server.AddError(_errorWriter, generationException.Path, new Diagnostic(generationException.MessageCode, position, message));
}
}
Expand All @@ -524,7 +572,20 @@ private ReturnCode AddErrorsAndComputeReturnCode()
CheckExternalDiagnostics(_dependenciesDiagnostics);
CheckExternalDiagnostics(_intrinsicsDiagnostics);

//Always return MissingCopy when there is at least one missing copy because it could help the developer to correct several parsing errors at once
//Avoid returning MissingCopy for users who are only interested in copies extraction
if (_configuration.ExecToStep <= ExecutionStep.Preprocessor)
{
if (_configuration.ExtractedCopiesFilePath != null
#if EUROINFO_RULES
|| _configuration.ReportUsedCopyNamesPath != null
#endif
)
{
return returnCode;
}
}

//Return MissingCopy when there is at least one missing copy because it could help the developer to correct several parsing errors at once
if (_missingCopies.Count > 0)
{
returnCode = ReturnCode.MissingCopy;
Expand Down
6 changes: 3 additions & 3 deletions CLI/src/Writer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ private void writeMessage(string id, Diagnostic error) {
writer.WriteStartElement("MESSAGE");
writer.WriteElementString("MSGNUMBER",
"TC-" + error.Info.Code.ToString().PadLeft(5, '0') + AsIBMSuffix((int) error.Info.Severity));
writer.WriteElementString("MSGLINE", error.Line.ToString());
writer.WriteElementString("MSGLINE", error.LineStart.ToString());
writer.WriteElementString("MSGFILE", id);
writer.WriteElementString("MSGTEXT", error.Message);
writer.WriteEndElement(); // MESSAGE
Expand Down Expand Up @@ -246,9 +246,9 @@ private void WriteDiagnostics()

//range
_xmlWriter.WriteStartElement("range");
_xmlWriter.WriteAttributeString("line-start", diagnostic.Line.ToString());
_xmlWriter.WriteAttributeString("line-start", diagnostic.LineStart.ToString());
_xmlWriter.WriteAttributeString("column-start", diagnostic.ColumnStart.ToString());
_xmlWriter.WriteAttributeString("line-end", diagnostic.Line.ToString());
_xmlWriter.WriteAttributeString("line-end", diagnostic.LineEnd.ToString());
_xmlWriter.WriteAttributeString("column-end", diagnostic.ColumnEnd.ToString());
_xmlWriter.WriteEndElement();

Expand Down
15 changes: 3 additions & 12 deletions CLI/test/CLI.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,9 @@
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<Choose>
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
</ItemGroup>
</Otherwise>
</Choose>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
</ItemGroup>
<ItemGroup>
<Compile Include="*.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
Expand Down
4 changes: 2 additions & 2 deletions CLI/test/CLITest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -378,8 +378,8 @@ public void TestRDZFormatInputEncodings()
[TestMethod]
public void TestCustomAnalyzers()
{
CLITestHelper.Test("custom_analyzers", ReturnCode.Warning);
CLITestHelper.Test("custom_analyzers_withcfg", ReturnCode.Warning);
CLITestHelper.Test("custom_analyzers", ReturnCode.ParsingDiagnostics);
CLITestHelper.Test("custom_analyzers_withcfg", ReturnCode.ParsingDiagnostics);
}

#if EUROINFO_RULES
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
ReturnCode=Warning_
6 errors in "input\CustomAnalyzers.rdz.tcbl":
ReturnCode=ParsingDiagnostics_
7 errors in "input\CustomAnalyzers.rdz.tcbl":
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummySyntaxDrivenAnalyzer': starting AST building...
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummySyntaxDrivenAnalyzer': finished AST building.
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummyQualityAnalyzer': number of tokens (after preprocessing): 32
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummyQualityAnalyzer': number of code elements: 9
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummyQualityAnalyzer': source file has 1 program(s), main program is 'DVZZMFT0'.
Line 0[0,0] <46, Error, CodeAnalysis> - CodeAnalysis: analyzer 'DummyQualityAnalyzerErrorInAnalysis' failed. Exception message is 'Exception in AST analysis intended.'
Line 0[0,0] <45, Warning, General> - Info: CFG/DFA analysis: no control flow graph found for this file.
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
ReturnCode=Warning_
6 errors in "input\CustomAnalyzers.rdz.tcbl":
ReturnCode=ParsingDiagnostics_
7 errors in "input\CustomAnalyzers.rdz.tcbl":
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummySyntaxDrivenAnalyzer': starting AST building...
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummySyntaxDrivenAnalyzer': finished AST building.
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummyQualityAnalyzer': number of tokens (after preprocessing): 32
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummyQualityAnalyzer': number of code elements: 9
Line 0[0,0] <45, Warning, General> - Info: Analyzer 'DummyQualityAnalyzer': source file has 1 program(s), main program is 'DVZZMFT0'.
Line 0[0,0] <46, Error, CodeAnalysis> - CodeAnalysis: analyzer 'DummyQualityAnalyzerErrorInAnalysis' failed. Exception message is 'Exception in AST analysis intended.'
Line 2[20,27] <45, Warning, General> - Info: CFG/DFA analysis: control flow graphs contains 2 blocks.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ReturnCode=ParsingDiagnostics_
ReturnCode=ParsingDiagnostics_
2 errors in "input\MainPgm.rdz.tcbl":
Line 15[12,20] <27, Error, Syntax> - Syntax error : Function 'DVZTEST1.GetTecMsg' expected parameter 'capt' of type DVZTEST2.Span and received 't1' of type TCOSMPL2.type1
Line 18[12,20] <27, Error, Syntax> - Syntax error : Function 'GetTecMsg' expected parameter 'capt' of type DVZTEST2.Span and received 't1' of type TCOSMPL2.type1
Range (15, 12) -> (16, 20) <27, Error, Syntax> - Syntax error : Function 'DVZTEST1.GetTecMsg' expected parameter 'capt' of type DVZTEST2.Span and received 't1' of type TCOSMPL2.type1
Range (18, 12) -> (19, 20) <27, Error, Syntax> - Syntax error : Function 'GetTecMsg' expected parameter 'capt' of type DVZTEST2.Span and received 't1' of type TCOSMPL2.type1
4 changes: 2 additions & 2 deletions CLI/test/ressources/dependencies_3/output_expected/error.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
ReturnCode=ParsingDiagnostics_
ReturnCode=ParsingDiagnostics_
1 error in "input\PGM3.rdz.tcbl":
Line 26[12,39] <30, Error, Semantics> - Semantic error: Function not found 'MyPublicProcedure' input(DATE)
Range (26, 12) -> (27, 39) <30, Error, Semantics> - Semantic error: Function not found 'MyPublicProcedure' input(DATE)
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
ReturnCode=Warning_
6 errors in "input\DocGen.tcbl":
Line 9[13,18] <37, Warning, General> - Warning: Type Definition does not support Parameters field
Line 9[13,18] <37, Warning, General> - Warning: Formalized comment field is declared more than once : params
Line 13[12,17] <37, Warning, General> - Warning: Formalized comment field is declared more than once : Params
Line 9[13,18] <37, Warning, General> - Warning: Type Definition does not support Parameters field
Line 60[12,14] <37, Warning, General> - Warning: Parameter name does not match to any function parameter: blu
Line 65[21,26] <37, Warning, General> - Warning: Parameter does not have any description inside the formalized comments: myBool
Line 67[21,23] <37, Warning, General> - Warning: Parameter does not have any description inside the formalized comments: bli
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
ReturnCode=ParsingDiagnostics_
ReturnCode=ParsingDiagnostics_
1 error in "input\PGM3.rdz.tcbl":
Line 28[12,39] <30, Error, Semantics> - Semantic error: Function not found 'MyPublicProcedure' input(DATE)
Range (28, 12) -> (29, 39) <30, Error, Semantics> - Semantic error: Function not found 'MyPublicProcedure' input(DATE)
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
ReturnCode=Warning_
4 errors in "input\Callee.rdz.tcbl":
7 errors in "input\Callee.rdz.tcbl":
Line 48[15,21] <37, Warning, General> - Warning: Parameter name does not match to any program parameter: MyType2
Line 49[15,21] <37, Warning, General> - Warning: Parameter name does not match to any program parameter: MyType3
Line 50[15,20] <37, Warning, General> - Warning: Parameter name does not match to any program parameter: Mydate
Line 78[17,22] <37, Warning, General> - Warning: Parameter does not have any description inside the formalized comments: mydate
Line 79[17,23] <37, Warning, General> - Warning: Parameter does not have any description inside the formalized comments: myDate2
Line 90[17,22] <37, Warning, General> - Warning: Parameter does not have any description inside the formalized comments: mydate
Expand Down
2 changes: 1 addition & 1 deletion CSCup/App.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
2 changes: 1 addition & 1 deletion Codegen/src/App.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
4 changes: 2 additions & 2 deletions Codegen/src/Codegen.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\TypeCobol.TemplateTask.1.1.0\lib\net46\TypeCobol.TemplateTask.props" Condition="Exists('..\..\packages\TypeCobol.TemplateTask.1.1.0\lib\net46\TypeCobol.TemplateTask.props')" />
<Import Project="..\..\packages\TypeCobol.TemplateTask.1.3.0\lib\net472\TypeCobol.TemplateTask.props" Condition="Exists('..\..\packages\TypeCobol.TemplateTask.1.3.0\lib\net472\TypeCobol.TemplateTask.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="..\..\TypeCobol\Common.props" />
<PropertyGroup>
Expand Down Expand Up @@ -60,7 +60,7 @@
</TCTemplate>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\..\packages\TypeCobol.TemplateTask.1.1.0\lib\net46\TypeCobol.TemplateTask.targets" Condition="Exists('..\..\packages\TypeCobol.TemplateTask.1.1.0\lib\net46\TypeCobol.TemplateTask.targets')" />
<Import Project="..\..\packages\TypeCobol.TemplateTask.1.3.0\lib\net472\TypeCobol.TemplateTask.targets" Condition="Exists('..\..\packages\TypeCobol.TemplateTask.1.3.0\lib\net472\TypeCobol.TemplateTask.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
Expand Down
Loading