Commit 8578cb14 by liulongfei

添加高尔夫 SDK

parent 6c799b94
发球台(Tee): 高尔夫选手每洞发第一个球的平坦区域。他们必须在发球台两个标志之间发球。这也指高尔夫选手只可以在第一次击球使用的木制或者塑料制的spike,把球举起来,这样打球更容易一些。
发球台(Tee): 高尔夫选手每洞发第一个球的平坦区域。他们必须在发球台两个标志之间发球。这也指高尔夫选手只可以在第一次击球使用的木制或者塑料制的spike,把球举起来,这样打球更容易一些。
果岭(The Green): 在球洞周围非常平坦的区域。这个区域的草很特殊,有利于选手将球推到洞中。
铁杆(Iron): 用金属做的杆,有角度的杆头是用作中距离的击球。高尔夫球手会带很多这种杆。杆号越小(例如4号铁杆),球击得越远。
木杆1号(Driver): 有圆的大杆头的大木杆,用来击出长距离的球。高尔夫选手自己的球袋里可能没有准备。大力击球就是用1号木杆击出长距离的球。
沙杆或劈起杆(Wedge): 是一种特殊铁杆,在杆头有更大的角度,后部设计得光滑,用作从沙坑处非常短而高的击球。
球童(Caddy): 负责在球场中为专业选手背高尔夫球杆包,建议高尔夫球手杆的选择和技巧的人。球僮通常获得他们服务的高尔夫球手奖励的10-15%。
轮(Round): 一“轮”是18个洞。每天选手们进行一轮的比赛。
职业选手(Pro): Professional(职业选手)的缩写,指那些以打高尔夫球为生的人,已获打高尔夫职业比赛的资格。
Fore: 当高尔夫球被意外地击向另外一人时,该词被喊出,以警告该人躲藏闪避。如果你听到这个词,用手盖上你的头和脸。
球道(Fairway): 从发球台到果岭之间宽阔的草区域。
长草区(Rough): 球道的边缘区,草更长一些,所以不容易打球。
洞(Hole): 高尔夫球场上一共有18个洞。由发球台、球道和果岭组成。洞也指事实上高尔夫选手想把球打进的洞,通常里面插一只旗来指示。里面插一只旗来指示。#高尔夫科普 #高尔夫教学 #高尔夫 #高尔夫练习 #高尔夫挥杆 #我的运动日常 #运动
\ No newline at end of file
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
...@@ -11,6 +12,34 @@ namespace VIZ.Framework.TVP.Golf ...@@ -11,6 +12,34 @@ namespace VIZ.Framework.TVP.Golf
/// </summary> /// </summary>
public enum LaunchMonitorErrorCode public enum LaunchMonitorErrorCode
{ {
/// <summary>
/// DLL初始化失败
/// </summary>
[Description("DLL初始化失败")]
DLL_INITIALIZATION_FAILURE = 0,
/// <summary>
/// 无法检索DEV状态
/// </summary>
[Description("无法检索DEV状态")]
UNABLE_TO_RETRIEVE_DEV_STATUS = 1,
/// <summary>
/// 无法建立事件回调
/// </summary>
[Description("无法建立事件回调")]
UNABLE_TO_ESTABLISH_CALLBACK_FOR_EVENTS = 2,
/// <summary>
/// 无法检索球放置数据
/// </summary>
[Description("无法检索球放置数据")]
UNABLE_TO_RETRIEVE_BALL_PLACEMENT_DATA = 3,
/// <summary>
/// 未知异常
/// </summary>
[Description("未知异常")]
UNKNOWN_ERROR = 4
} }
} }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using VIZ.Framework.Core;
namespace VIZ.Framework.TVP.Golf
{
/// <summary>
/// 高尔夫球模型
/// </summary>
public class GolfBallModel : ModelBase
{
#region Location -- 位置
private Point location;
/// <summary>
/// 位置
/// </summary>
public Point Location
{
get { return location; }
set { location = value; this.RaisePropertyChanged(nameof(Location)); }
}
#endregion
#region Diameter -- 直径
private double diameter;
/// <summary>
/// 直径
/// </summary>
public double Diameter
{
get { return diameter; }
set { diameter = value; this.RaisePropertyChanged(nameof(Diameter)); }
}
#endregion
}
}
using System; using log4net;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -14,6 +15,36 @@ namespace VIZ.Framework.TVP.Golf ...@@ -14,6 +15,36 @@ namespace VIZ.Framework.TVP.Golf
/// </summary> /// </summary>
public class GolfDeviceModel : ModelBase public class GolfDeviceModel : ModelBase
{ {
/// <summary>
/// 日志
/// </summary>
private readonly static ILog log = LogManager.GetLogger(typeof(GolfDeviceModel));
/// <summary>
/// 最大球数量
/// </summary>
private const int MAX_BALLS = 5;
/// <summary>
/// 高尔夫 包装 设备模型
/// </summary>
public GolfDeviceModel()
{
// 初始化球模型
this.initBallModel();
}
/// <summary>
/// 初始化球模型
/// </summary>
private void initBallModel()
{
for (int i = 0; i < MAX_BALLS; i++)
{
this.BallModels.Add(new GolfBallModel());
}
}
// =============================================================================== // ===============================================================================
// Property // Property
// =============================================================================== // ===============================================================================
...@@ -88,11 +119,11 @@ namespace VIZ.Framework.TVP.Golf ...@@ -88,11 +119,11 @@ namespace VIZ.Framework.TVP.Golf
#endregion #endregion
#region LeftTeeAreaPoints -- 左手球座区域 #region LeftTeeAreaPoints -- 左手发球台区域
private PointCollection leftTeeAreaPoints; private PointCollection leftTeeAreaPoints;
/// <summary> /// <summary>
/// 左手球座区域 /// 左手发球台区域
/// </summary> /// </summary>
public PointCollection LeftTeeAreaPoints public PointCollection LeftTeeAreaPoints
{ {
...@@ -102,11 +133,11 @@ namespace VIZ.Framework.TVP.Golf ...@@ -102,11 +133,11 @@ namespace VIZ.Framework.TVP.Golf
#endregion #endregion
#region RightTeeAreaPoints -- 右手球座区域 #region RightTeeAreaPoints -- 右手发球台区域
private PointCollection rightTeeAreaPoints; private PointCollection rightTeeAreaPoints;
/// <summary> /// <summary>
/// 右手球座区域 /// 右手发球台区域
/// </summary> /// </summary>
public PointCollection RightTeeAreaPoints public PointCollection RightTeeAreaPoints
{ {
...@@ -116,6 +147,245 @@ namespace VIZ.Framework.TVP.Golf ...@@ -116,6 +147,245 @@ namespace VIZ.Framework.TVP.Golf
#endregion #endregion
#region HittingMode -- 打击模式
private LaunchMonitor.HittingMode hittingMode;
/// <summary>
/// 打击模式
/// </summary>
public LaunchMonitor.HittingMode HittingMode
{
get { return hittingMode; }
set { hittingMode = value; this.RaisePropertyChanged(nameof(HittingMode)); }
}
#endregion
#region BallCount -- 球数量
private int ballCount;
/// <summary>
/// 球数量
/// </summary>
public int BallCount
{
get { return ballCount; }
set { ballCount = value; this.RaisePropertyChanged(nameof(BallCount)); }
}
#endregion
#region BallModels -- 球模型集合
private List<GolfBallModel> ballModels = new List<GolfBallModel>();
/// <summary>
/// 球模型集合
/// </summary>
public List<GolfBallModel> BallModels
{
get { return ballModels; }
set { ballModels = value; this.RaisePropertyChanged(nameof(BallModels)); }
}
#endregion
#region IsLocked -- 是否锁住
private bool isLocked;
/// <summary>
/// 是否锁住
/// </summary>
public bool IsLocked
{
get { return isLocked; }
set { isLocked = value; this.RaisePropertyChanged(nameof(IsLocked)); }
}
#endregion
#region IsLockedRight -- 是否锁住右侧,否则锁住左侧
private bool isLockedRight;
/// <summary>
/// 是否锁住右侧,否则锁住左侧
/// </summary>
public bool IsLockedRight
{
get { return isLockedRight; }
set { isLockedRight = value; this.RaisePropertyChanged(nameof(IsLockedRight)); }
}
#endregion
#region IsHMTConnected -- HMT是否连接
private bool isHMTConnected;
/// <summary>
/// HMT是否连接
/// </summary>
public bool IsHMTConnected
{
get { return isHMTConnected; }
set { isHMTConnected = value; this.RaisePropertyChanged(nameof(IsHMTConnected)); }
}
#endregion
#region ErrorString -- 错误信息
private string errorString;
/// <summary>
/// 错误信息
/// </summary>
public string ErrorString
{
get { return errorString; }
set { errorString = value; this.RaisePropertyChanged(nameof(ErrorString)); }
}
#endregion
// -------------------------------------------------------------------------
// 标记属性
#region IsIndoorOnly -- 是否仅室内
private bool isIndoorOnly;
/// <summary>
/// 是否仅室内
/// </summary>
public bool IsIndoorOnly
{
get { return isIndoorOnly; }
private set { isIndoorOnly = value; this.RaisePropertyChanged(nameof(IsIndoorOnly)); }
}
#endregion
#region IsTrackerEnabled -- 跟踪器是否启用
private bool isTrackerEnabled;
/// <summary>
/// 跟踪器是否启用
/// </summary>
public bool IsTrackerEnabled
{
get { return isTrackerEnabled; }
private set { isTrackerEnabled = value; this.RaisePropertyChanged(nameof(IsTrackerEnabled)); }
}
#endregion
#region IsBluetoothEnabled -- 蓝牙是否启用
private bool isBluetoothEnabled;
/// <summary>
/// 蓝牙是否启用
/// </summary>
public bool IsBluetoothEnabled
{
get { return isBluetoothEnabled; }
private set { isBluetoothEnabled = value; this.RaisePropertyChanged(nameof(IsBluetoothEnabled)); }
}
#endregion
// -------------------------------------------------------------------------
// 闪存属性
#region FlashSequences -- 闪存序列
private uint flashSequences;
/// <summary>
/// 闪存序列
/// </summary>
public uint FlashSequences
{
get { return flashSequences; }
set { flashSequences = value; this.RaisePropertyChanged(nameof(FlashSequences)); }
}
#endregion
#region FlashCount -- 闪存数量
private uint flashCount;
/// <summary>
/// 闪存数量
/// </summary>
public uint FlashCount
{
get { return flashCount; }
set { flashCount = value; this.RaisePropertyChanged(nameof(FlashCount)); }
}
#endregion
#region FlashEnergy -- 闪存能量
private uint flashEnergy;
/// <summary>
/// 闪存能量
/// </summary>
public uint FlashEnergy
{
get { return flashEnergy; }
set { flashEnergy = value; this.RaisePropertyChanged(nameof(FlashEnergy)); }
}
#endregion
#region LastShotFlashEnergy -- 最后一次闪存能量
private uint lastShotFlashEnergy;
/// <summary>
/// 最后一次闪存能量
/// </summary>
public uint LastShotFlashEnergy
{
get { return lastShotFlashEnergy; }
set { lastShotFlashEnergy = value; this.RaisePropertyChanged(nameof(LastShotFlashEnergy)); }
}
#endregion
#region FlashMisfires -- 闪存失效
private uint flashMisfires;
/// <summary>
/// 闪存失效
/// </summary>
public uint FlashMisfires
{
get { return flashMisfires; }
set { flashMisfires = value; this.RaisePropertyChanged(nameof(FlashMisfires)); }
}
#endregion
#region ShotCount -- 快照计数
private uint shotCount;
/// <summary>
/// 快照计数
/// </summary>
public uint ShotCount
{
get { return shotCount; }
set { shotCount = value; this.RaisePropertyChanged(nameof(ShotCount)); }
}
#endregion
// ===============================================================================
// Field
// ===============================================================================
/// <summary>
/// 是否接受到新的打击事件
/// </summary>
private bool isNewShotReceived;
// =============================================================================== // ===============================================================================
// Public Function // Public Function
// =============================================================================== // ===============================================================================
...@@ -123,31 +393,217 @@ namespace VIZ.Framework.TVP.Golf ...@@ -123,31 +393,217 @@ namespace VIZ.Framework.TVP.Golf
/// <summary> /// <summary>
/// 连接设备 /// 连接设备
/// </summary> /// </summary>
public void Connect() /// <returns>是否成功连接</returns>
public bool Connect()
{ {
if (!LaunchMonitor.Connect()) if (!LaunchMonitor.Connect())
{ {
// 清除连接失败次数 ++this.ConnectionFailures;
this.ConnectionFailures = 0;
// 设备序列号
this.SerialNumber = LaunchMonitor.GetSerialNumber();
// 设置已经连接 return false;
this.IsConnected = true; }
// 清除连接失败次数
this.ConnectionFailures = 0;
// 设备序列号
this.SerialNumber = LaunchMonitor.GetSerialNumber();
// 打击模式
this.HittingMode = this.GetHittingMode();
// 获取标记
if (!this.GetFlags())
{
log.Error($"get golf flags error.");
} }
// 获取统计信息
if (!this.GetFlashStatistics())
{
log.Error($"get golf flash statistics error.");
}
// 获取快照计数
this.ShotCount = LaunchMonitor.GetShotCount();
// 初始化球位置信息
BallPlacementStateChangeCallback(LaunchMonitor.GetBallPlacementState());
// 设置球位置信息改变回调函数
LaunchMonitor.SetBallLockCallback(BallPlacementStateChangeCallback);
// 设置新的打击事件回调函数
LaunchMonitor.SetNewShotEventCallback(NewShotEventCallback);
// 设置已经连接
this.IsConnected = true;
return true;
}
/// <summary>
/// 断开连接
/// </summary>
public void Disconnect()
{
LaunchMonitor.Disconnect();
} }
private PointCollection MapPointCollectionToForm(PointCollection points) /// <summary>
/// 获取打击模式
/// </summary>
private LaunchMonitor.HittingMode GetHittingMode()
{ {
PointCollection result = new PointCollection(); BallFindDLLProxy.HittingMode mode = new BallFindDLLProxy.HittingMode();
foreach (Point p in points) mode.mode = -1;
result.Add(MapPointToForm(p)); if (BallFindDLLProxy.ITRACK_GetHittingMode(ref mode) != BallFindDLLProxy.ITRACK_SUCCESS)
return LaunchMonitor.HittingMode.UNDEFINED;
switch (mode.mode)
{
case 0: return LaunchMonitor.HittingMode.NORMAL;
case 1: return LaunchMonitor.HittingMode.RIGHT_ONLY;
case 2: return LaunchMonitor.HittingMode.LEFT_ONLY;
default: return LaunchMonitor.HittingMode.UNDEFINED;
}
}
/// <summary>
/// 获取标记
/// </summary>
/// <returns>是否成功获取</returns>
private bool GetFlags()
{
// 初始化标记
if (!LaunchMonitor.GetInstallationFlags())
return false;
// 是否仅室内
this.IsIndoorOnly = LaunchMonitor.IndoorOnly();
// 跟踪器是否启用
this.IsTrackerEnabled = !LaunchMonitor.TrackerDisabled();
// 蓝牙是否启用
this.IsBluetoothEnabled = !LaunchMonitor.BluetoothDisabled();
return true;
}
/// <summary>
/// 获取统计信息
/// </summary>
/// <returns>是否成功获取</returns>
private bool GetFlashStatistics()
{
if (!LaunchMonitor.GetFlashStatistics())
return false;
// 闪存序列
this.FlashSequences = LaunchMonitor.GetFlashSequences();
// 闪存数量
this.FlashCount = LaunchMonitor.GetTotalFlashCount();
// 闪存能量
this.FlashEnergy = LaunchMonitor.GetTotalEnergyUse();
// 闪存失火
this.FlashMisfires = LaunchMonitor.GetTotalMisfires();
this.LastShotFlashEnergy = LaunchMonitor.GetLastShotAverageEnergy();
return true;
}
/// <summary>
/// 获取错误码
/// </summary>
/// <returns>错误码</returns>
private LaunchMonitorErrorCode GetErrorCode()
{
int error_code = LaunchMonitor.GetErrorCode();
LaunchMonitorErrorCode result = (LaunchMonitorErrorCode)error_code;
return result; return result;
} }
private Point MapPointToForm(Point p) /// <summary>
/// 设置是否是仅室内
/// </summary>
/// <param name="isIndoorOnly">是否是仅室内</param>
/// <returns>是否成功设置</returns>
private bool SetIsIndoorOnly(bool isIndoorOnly)
{
if (!LaunchMonitor.SetInstallationFlags(isIndoorOnly))
return false;
this.IsIndoorOnly = IsIndoorOnly;
return true;
}
/// <summary>
/// 设置跟踪和蓝牙是否启用
/// </summary>
/// <param name="isTrackerEnabled">跟踪是否启用</param>
/// <param name="isBluetoothEnabled">蓝牙是否启用</param>
/// <returns>是否成功设置</returns>
private bool SetTrackerAndBluetoothEnabled(bool isTrackerEnabled, bool isBluetoothEnabled)
{
if (!LaunchMonitor.SetSleepFlags(!isTrackerEnabled, !isBluetoothEnabled))
return false;
this.IsTrackerEnabled = isTrackerEnabled;
this.IsBluetoothEnabled = isBluetoothEnabled;
return true;
}
/// <summary>
/// 设置打击模式
/// </summary>
/// <param name="hittingMode">打击模式</param>
/// <returns>是否成功设置</returns>
private bool SetHittingMode(LaunchMonitor.HittingMode hittingMode)
{
if (!LaunchMonitor.SetHittingMode(hittingMode))
return false;
this.HittingMode = hittingMode;
return true;
}
/// <summary>
/// 球放置状态改变回调
/// </summary>
/// <param name="state">新状态</param>
private void BallPlacementStateChangeCallback(LaunchMonitor.BallPlacementState state)
{
if ((state.mBallCount == 0) && (this.BallCount != 0)) // The ball disappeared (perhaps it was hit)
{
if (!mNewShotReceived) // there may have been a misfire (a "new shot" event is not sent after a misfire)
Application.Current.Dispatcher.Invoke(new Action(() => { GetFlashStatistics(); GetShotCount(); }));
mNewShotReceived = false; // reset when ball count = 0 (guaranteed after a new shot - okay if just moved out of view)
}
// 更新球数量
this.BallCount = state.mBallCount;
// 是否锁住
this.IsLocked = state.mLocked;
// 是否锁住右侧,否则锁住左侧
this.IsLockedRight = state.mLockedRight;
// HMT是否连接
this.IsHMTConnected = state.mHMTConnected;
// 更新球位置与直径(最大球数量:5)
for (int i = 0; i < this.BallCount; i++)
{
this.BallModels[i].Location = state.mBallPositions[i].Location;
this.BallModels[i].Diameter = state.mBallPositions[i].Diameter;
}
}
/// <summary>
/// 新的打击事件回调
/// </summary>
private void NewShotEventCallback()
{ {
return new Point(mCenterX + p.X * mScaleFactor, mCenterY + p.Y * mScaleFactor); // 获取统计信息
this.GetFlashStatistics();
// 获取快照计数
this.ShotCount = LaunchMonitor.GetShotCount();
//
} }
} }
} }
...@@ -50,8 +50,13 @@ ...@@ -50,8 +50,13 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.14.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.14\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
...@@ -72,6 +77,7 @@ ...@@ -72,6 +77,7 @@
</Page> </Page>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Model\GolfBallModel.cs" />
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
...@@ -88,7 +94,7 @@ ...@@ -88,7 +94,7 @@
<Compile Include="SDK\BallFindDLLProxy.cs" /> <Compile Include="SDK\BallFindDLLProxy.cs" />
<Compile Include="SDK\LaunchMonitor.cs" /> <Compile Include="SDK\LaunchMonitor.cs" />
<Compile Include="Model\GolfDeviceModel.cs" /> <Compile Include="Model\GolfDeviceModel.cs" />
<Compile Include="SDK\LaunchMonitorErrorCode.cs" /> <Compile Include="Enum\LaunchMonitorErrorCode.cs" />
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
...@@ -96,14 +102,13 @@ ...@@ -96,14 +102,13 @@
<None Include="Lib\itrackSDK_net\accessConfig" /> <None Include="Lib\itrackSDK_net\accessConfig" />
<None Include="Lib\itrackSDK_usb\accessConfig" /> <None Include="Lib\itrackSDK_usb\accessConfig" />
<None Include="Lib\itrackSDK_usb\itrackUSBDriver\itrackusbdriver.cat" /> <None Include="Lib\itrackSDK_usb\itrackUSBDriver\itrackusbdriver.cat" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup />
<Folder Include="Doc\" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Lib\itrackSDK_net\BallPlacementSimulator.exe" /> <None Include="Lib\itrackSDK_net\BallPlacementSimulator.exe" />
<None Include="Lib\itrackSDK_net\FETestApp.exe" /> <None Include="Lib\itrackSDK_net\FETestApp.exe" />
...@@ -125,5 +130,8 @@ ...@@ -125,5 +130,8 @@
<Name>VIZ.Framework.Core</Name> <Name>VIZ.Framework.Core</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="Doc\专业术语.txt" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.14" targetFramework="net48" />
</packages>
\ No newline at end of file
...@@ -49,8 +49,13 @@ ...@@ -49,8 +49,13 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.14.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.14\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
...@@ -61,5 +66,8 @@ ...@@ -61,5 +66,8 @@
<ItemGroup> <ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.14" targetFramework="net48" />
</packages>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment