BULK-Insert im ZUGFeRD Service
This commit is contained in:
parent
15e67f1e4c
commit
93a3051027
@ -104,9 +104,7 @@ Public Class PropertyValues
|
|||||||
Dim oPropertyValue = oColumn.Value.ElementAtOrDefault(oRowIndex)
|
Dim oPropertyValue = oColumn.Value.ElementAtOrDefault(oRowIndex)
|
||||||
|
|
||||||
_logger.Debug("Processing itemSpecification *TableColumn* [{0}].", oTableColumn)
|
_logger.Debug("Processing itemSpecification *TableColumn* [{0}].", oTableColumn)
|
||||||
If oTableColumn = "INVOICE_SELLER_EMAIL" Then
|
|
||||||
Console.WriteLine("INVOICE_SELLER_EMAIL")
|
|
||||||
End If
|
|
||||||
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
|
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
|
||||||
If oColumn.Key.IsRequired Then
|
If oColumn.Key.IsRequired Then
|
||||||
_logger.Warn($"{MessageId} # oPropertyValue for specification [{oTableColumn}] is empty or not found but is required. Continuing with Empty String.")
|
_logger.Warn($"{MessageId} # oPropertyValue for specification [{oTableColumn}] is empty or not found but is required. Continuing with Empty String.")
|
||||||
|
|||||||
@ -10,6 +10,8 @@ Imports DigitalData.Modules.Interfaces.Exceptions
|
|||||||
Imports DigitalData.Modules.Jobs.Exceptions
|
Imports DigitalData.Modules.Jobs.Exceptions
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
Imports System.Data.SqlClient
|
Imports System.Data.SqlClient
|
||||||
|
Imports Newtonsoft.Json.Linq
|
||||||
|
Imports System.Xml.Linq
|
||||||
|
|
||||||
Public Class ImportZUGFeRDFiles
|
Public Class ImportZUGFeRDFiles
|
||||||
Implements IJob
|
Implements IJob
|
||||||
@ -527,22 +529,44 @@ Public Class ImportZUGFeRDFiles
|
|||||||
|
|
||||||
DeleteExistingPropertyValues(pMessageId, oConnections)
|
DeleteExistingPropertyValues(pMessageId, oConnections)
|
||||||
|
|
||||||
Dim oFirstProperty = oCheckResult.ValidProperties.FirstOrDefault()
|
' MP 05.06.2024 - Einzel-Inserts durch BULK-Insert abgelöst
|
||||||
If oFirstProperty IsNot Nothing Then
|
'Dim oFirstProperty = oCheckResult.ValidProperties.FirstOrDefault()
|
||||||
InsertPropertyValue(pMessageId, oConnections, New PropertyValues.ValidProperty() With {
|
'If oFirstProperty IsNot Nothing Then
|
||||||
.MessageId = pMessageId,
|
' InsertPropertyValue(pMessageId, oConnections, New PropertyValues.ValidProperty() With {
|
||||||
.Description = "ZUGFeRDSpezifikation",
|
' .MessageId = pMessageId,
|
||||||
.GroupCounter = 0,
|
' .Description = "ZUGFeRDSpezifikation",
|
||||||
.IsRequired = False,
|
' .GroupCounter = 0,
|
||||||
.Value = oDocument.Specification,
|
' .IsRequired = False,
|
||||||
.TableName = oFirstProperty.TableName,
|
' .Value = oDocument.Specification,
|
||||||
.TableColumn = "ZUGFERD_SPECIFICATION"
|
' .TableName = oFirstProperty.TableName,
|
||||||
})
|
' .TableColumn = "ZUGFERD_SPECIFICATION"
|
||||||
|
' })
|
||||||
|
'End If
|
||||||
|
|
||||||
|
'For Each oProperty In oCheckResult.ValidProperties
|
||||||
|
' InsertPropertyValue(pMessageId, oConnections, oProperty)
|
||||||
|
'Next
|
||||||
|
|
||||||
|
' DataTable vorbereiten
|
||||||
|
Dim oDataTable As DataTable = FillDataTable(pMessageId, oCheckResult, oDocument.Specification)
|
||||||
|
|
||||||
|
' ColumnList initialisieren
|
||||||
|
Dim oColumnNames As List(Of String) = New List(Of String) From {
|
||||||
|
"REFERENCE_GUID",
|
||||||
|
"ITEM_DESCRIPTION",
|
||||||
|
"ITEM_VALUE",
|
||||||
|
"GROUP_COUNTER",
|
||||||
|
"SPEC_NAME",
|
||||||
|
"IS_REQUIRED"
|
||||||
|
}
|
||||||
|
|
||||||
|
Dim oBulkResult = BulkInsert(oConnections, oDataTable, "TBEDMI_ITEM_VALUE", oColumnNames)
|
||||||
|
|
||||||
|
If oBulkResult = False Then
|
||||||
|
_logger.Error("Bulk Insert for MessageId [{0}] failed!", pMessageId)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
For Each oProperty In oCheckResult.ValidProperties
|
_logger.Info("Bulk Insert finished. [{0}] rows inserted for MessageId [{1}].", oDataTable.Rows.Count, pMessageId)
|
||||||
InsertPropertyValue(pMessageId, oConnections, oProperty)
|
|
||||||
Next
|
|
||||||
|
|
||||||
_logger.Debug("File processed.")
|
_logger.Debug("File processed.")
|
||||||
|
|
||||||
@ -554,6 +578,53 @@ Public Class ImportZUGFeRDFiles
|
|||||||
|
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Private Function FillDataTable(pMessageId As String, pCheckResult As PropertyValues.CheckPropertyValuesResult, pSpecification As String) As DataTable
|
||||||
|
|
||||||
|
Dim oDataTable As DataTable = New DataTable()
|
||||||
|
oDataTable.Columns.Add(New DataColumn("REFERENCE_GUID", GetType(String)))
|
||||||
|
oDataTable.Columns.Add(New DataColumn("ITEM_DESCRIPTION", GetType(String)))
|
||||||
|
oDataTable.Columns.Add(New DataColumn("ITEM_VALUE", GetType(String)))
|
||||||
|
oDataTable.Columns.Add(New DataColumn("GROUP_COUNTER", GetType(Int32)))
|
||||||
|
oDataTable.Columns.Add(New DataColumn("SPEC_NAME", GetType(String)))
|
||||||
|
oDataTable.Columns.Add(New DataColumn("IS_REQUIRED", GetType(Boolean)))
|
||||||
|
|
||||||
|
' Erste Zeile enthält die Spezifikation
|
||||||
|
Dim oFirstRow As DataRow = oDataTable.NewRow()
|
||||||
|
oFirstRow("REFERENCE_GUID") = pMessageId
|
||||||
|
oFirstRow("ITEM_DESCRIPTION") = "ZUGFeRDSpezifikation"
|
||||||
|
oFirstRow("ITEM_VALUE") = pSpecification
|
||||||
|
oFirstRow("GROUP_COUNTER") = 0
|
||||||
|
oFirstRow("SPEC_NAME") = "ZUGFERD_SPECIFICATION"
|
||||||
|
oFirstRow("IS_REQUIRED") = False
|
||||||
|
|
||||||
|
_logger.Debug("Mapping Property [ZUGFERD_SPECIFICATION] with value [{0}]", pSpecification)
|
||||||
|
oDataTable.Rows.Add(oFirstRow)
|
||||||
|
|
||||||
|
|
||||||
|
For Each oProperty In pCheckResult.ValidProperties
|
||||||
|
|
||||||
|
' If GroupCounter is -1, it means this is a default property that can only occur once.
|
||||||
|
' Set the actual inserted value to 0
|
||||||
|
Dim oGroupCounterValue As Integer = oProperty.GroupCounter
|
||||||
|
If oGroupCounterValue = -1 Then
|
||||||
|
oGroupCounterValue = 0
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim oNewRow As DataRow = oDataTable.NewRow()
|
||||||
|
oNewRow("REFERENCE_GUID") = pMessageId
|
||||||
|
oNewRow("ITEM_DESCRIPTION") = oProperty.Description
|
||||||
|
oNewRow("ITEM_VALUE") = oProperty.Value.Replace("'", "''")
|
||||||
|
oNewRow("GROUP_COUNTER") = oGroupCounterValue
|
||||||
|
oNewRow("SPEC_NAME") = oProperty.TableColumn
|
||||||
|
oNewRow("IS_REQUIRED") = oProperty.IsRequired
|
||||||
|
|
||||||
|
_logger.Debug("Mapping Property [{0}] with value [{1}]", oProperty.TableColumn, oProperty.Value.Replace("'", "''"))
|
||||||
|
oDataTable.Rows.Add(oNewRow)
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return oDataTable
|
||||||
|
End Function
|
||||||
|
|
||||||
Private Sub DeleteExistingPropertyValues(pMessageId As String, pConnections As DatabaseConnections)
|
Private Sub DeleteExistingPropertyValues(pMessageId As String, pConnections As DatabaseConnections)
|
||||||
Dim oDelSQL = $"DELETE FROM TBEDMI_ITEM_VALUE where REFERENCE_GUID = '{pMessageId}'"
|
Dim oDelSQL = $"DELETE FROM TBEDMI_ITEM_VALUE where REFERENCE_GUID = '{pMessageId}'"
|
||||||
Dim oStep As String
|
Dim oStep As String
|
||||||
@ -566,25 +637,46 @@ Public Class ImportZUGFeRDFiles
|
|||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub InsertPropertyValue(pMessageId As String, pConnections As DatabaseConnections, pProperty As PropertyValues.ValidProperty)
|
' Alte Insert-Methode
|
||||||
Dim oGroupCounterValue = pProperty.GroupCounter
|
'Private Sub InsertPropertyValue(pMessageId As String, pConnections As DatabaseConnections, pProperty As PropertyValues.ValidProperty)
|
||||||
|
' Dim oGroupCounterValue = pProperty.GroupCounter
|
||||||
|
|
||||||
' If GroupCounter is -1, it means this is a default property that can only occur once.
|
' ' If GroupCounter is -1, it means this is a default property that can only occur once.
|
||||||
' Set the actual inserted value to 0
|
' ' Set the actual inserted value to 0
|
||||||
If oGroupCounterValue = -1 Then
|
' If oGroupCounterValue = -1 Then
|
||||||
oGroupCounterValue = 0
|
' oGroupCounterValue = 0
|
||||||
End If
|
' End If
|
||||||
|
|
||||||
Dim oCommand = $"INSERT INTO {pProperty.TableName} (REFERENCE_GUID, ITEM_DESCRIPTION, ITEM_VALUE, GROUP_COUNTER, SPEC_NAME, IS_REQUIRED) VALUES
|
' Dim oCommand = $"INSERT INTO {pProperty.TableName} (REFERENCE_GUID, ITEM_DESCRIPTION, ITEM_VALUE, GROUP_COUNTER, SPEC_NAME, IS_REQUIRED) VALUES
|
||||||
('{pMessageId}', '{pProperty.Description}', '{pProperty.Value.Replace("'", "''")}', {oGroupCounterValue},'{pProperty.TableColumn}','{pProperty.IsRequired}')"
|
' ('{pMessageId}', '{pProperty.Description}', '{pProperty.Value.Replace("'", "''")}', {oGroupCounterValue},'{pProperty.TableColumn}','{pProperty.IsRequired}')"
|
||||||
_logger.Debug("Mapping Property [{0}] with value [{1}], Will be inserted into table [{2}]", pProperty.TableColumn, pProperty.Value.Replace("'", "''"), pProperty.TableName)
|
' _logger.Debug("Mapping Property [{0}] with value [{1}], Will be inserted into table [{2}]", pProperty.TableColumn, pProperty.Value.Replace("'", "''"), pProperty.TableName)
|
||||||
|
|
||||||
' Insert into SQL Server
|
' ' Insert into SQL Server
|
||||||
Dim oResult = _mssql.ExecuteNonQueryWithConnectionObject(oCommand, pConnections.SQLServerConnection, MSSQLServer.TransactionMode.ExternalTransaction, pConnections.SQLServerTransaction)
|
' Dim oResult = _mssql.ExecuteNonQueryWithConnectionObject(oCommand, pConnections.SQLServerConnection, MSSQLServer.TransactionMode.ExternalTransaction, pConnections.SQLServerTransaction)
|
||||||
If oResult = False Then
|
' If oResult = False Then
|
||||||
_logger.Warn($"SQL Command [{oCommand}] was not successful. Check the log.")
|
' _logger.Warn($"SQL Command [{oCommand}] was not successful. Check the log.")
|
||||||
End If
|
' End If
|
||||||
End Sub
|
'End Sub
|
||||||
|
|
||||||
|
Private Function BulkInsert(pConnections As DatabaseConnections, pTable As DataTable, pDestinationTable As String, pColumns As List(Of String)) As Boolean
|
||||||
|
|
||||||
|
Using oBulkCopy = New SqlBulkCopy(pConnections.SQLServerConnection, SqlBulkCopyOptions.Default, pConnections.SQLServerTransaction)
|
||||||
|
|
||||||
|
oBulkCopy.DestinationTableName = pDestinationTable
|
||||||
|
For Each oColumn In pColumns
|
||||||
|
oBulkCopy.ColumnMappings.Add(New SqlBulkCopyColumnMapping(oColumn, oColumn))
|
||||||
|
Next
|
||||||
|
|
||||||
|
Try
|
||||||
|
oBulkCopy.WriteToServer(pTable)
|
||||||
|
Catch ex As Exception
|
||||||
|
_logger.Error(ex)
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Using
|
||||||
|
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
Private Sub AddRejectedState(pMessageID As String, pTitle As String, pTitle1 As String, pComment As String, pTransaction As SqlTransaction)
|
Private Sub AddRejectedState(pMessageID As String, pTitle As String, pTitle1 As String, pComment As String, pTransaction As SqlTransaction)
|
||||||
Try
|
Try
|
||||||
|
|||||||
@ -1,151 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{7C3B0C7E-59FE-4E1A-A655-27AE119F9444}</ProjectGuid>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<RootNamespace>DigitalData.Modules.Patterns</RootNamespace>
|
|
||||||
<AssemblyName>DigitalData.Modules.Patterns</AssemblyName>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<MyType>Windows</MyType>
|
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<DefineDebug>true</DefineDebug>
|
|
||||||
<DefineTrace>true</DefineTrace>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DocumentationFile>DigitalData.Modules.Patterns.xml</DocumentationFile>
|
|
||||||
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<DefineDebug>false</DefineDebug>
|
|
||||||
<DefineTrace>true</DefineTrace>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DocumentationFile>DigitalData.Modules.Patterns.xml</DocumentationFile>
|
|
||||||
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<OptionExplicit>On</OptionExplicit>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<OptionCompare>Binary</OptionCompare>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<OptionStrict>Off</OptionStrict>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<OptionInfer>On</OptionInfer>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
|
||||||
<Reference Include="DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
|
||||||
<Reference Include="DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
|
||||||
<Reference Include="Interop.WINDREAMLib">
|
|
||||||
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath>
|
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\NLog.4.7.10\lib\net45\NLog.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.Configuration" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.IO.Compression" />
|
|
||||||
<Reference Include="System.Runtime.Serialization" />
|
|
||||||
<Reference Include="System.ServiceModel" />
|
|
||||||
<Reference Include="System.Transactions" />
|
|
||||||
<Reference Include="System.Windows.Forms" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Import Include="Microsoft.VisualBasic" />
|
|
||||||
<Import Include="System" />
|
|
||||||
<Import Include="System.Collections" />
|
|
||||||
<Import Include="System.Collections.Generic" />
|
|
||||||
<Import Include="System.Data" />
|
|
||||||
<Import Include="System.Diagnostics" />
|
|
||||||
<Import Include="System.Linq" />
|
|
||||||
<Import Include="System.Xml.Linq" />
|
|
||||||
<Import Include="System.Threading.Tasks" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Constants.vb" />
|
|
||||||
<Compile Include="Modules\FileInformation.vb" />
|
|
||||||
<Compile Include="Modules\Globix\GlobixAutomatic.vb" />
|
|
||||||
<Compile Include="Modules\IDB.vb" />
|
|
||||||
<Compile Include="Modules\Globix\GlobixManual.vb" />
|
|
||||||
<Compile Include="Modules\Windream.vb" />
|
|
||||||
<Compile Include="Modules\User.vb" />
|
|
||||||
<Compile Include="IModule.vb" />
|
|
||||||
<Compile Include="Modules\Clipboard.vb" />
|
|
||||||
<Compile Include="Modules\Controls.vb" />
|
|
||||||
<Compile Include="Modules\Internal.vb" />
|
|
||||||
<Compile Include="Modules\BaseModule.vb" />
|
|
||||||
<Compile Include="Pattern.vb" />
|
|
||||||
<Compile Include="Patterns.vb" />
|
|
||||||
<Compile Include="My Project\AssemblyInfo.vb" />
|
|
||||||
<Compile Include="My Project\Application.Designer.vb">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DependentUpon>Application.myapp</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="My Project\Resources.Designer.vb">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="My Project\Settings.Designer.vb">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DependentUpon>Settings.settings</DependentUpon>
|
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Patterns2.vb" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Include="My Project\Resources.resx">
|
|
||||||
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
|
||||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</EmbeddedResource>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="app.config" />
|
|
||||||
<None Include="My Project\Application.myapp">
|
|
||||||
<Generator>MyApplicationCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>Application.Designer.vb</LastGenOutput>
|
|
||||||
</None>
|
|
||||||
<None Include="My Project\Settings.settings">
|
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
|
||||||
<CustomToolNamespace>My</CustomToolNamespace>
|
|
||||||
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
|
||||||
</None>
|
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\Controls.LookupGrid\LookupControl.vbproj">
|
|
||||||
<Project>{3dcd6d1a-c830-4241-b7e4-27430e7ea483}</Project>
|
|
||||||
<Name>LookupControl</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Modules.Logging\Logging.vbproj">
|
|
||||||
<Project>{903B2D7D-3B80-4BE9-8713-7447B704E1B0}</Project>
|
|
||||||
<Name>Logging</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\Modules.ZooFlow\ZooFlow.vbproj">
|
|
||||||
<Project>{81cac44f-3711-4c8f-ae98-e02a7448782a}</Project>
|
|
||||||
<Name>ZooFlow</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup />
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
|
||||||
</Project>
|
|
||||||
Loading…
x
Reference in New Issue
Block a user