Browse Source

合成

ZhangXueYang
zhangxueyang 3 years ago
parent
commit
0ccb2e3234

+ 1
- 0
Common/Common.csproj View File

@@ -122,6 +122,7 @@
122 122
     <Compile Include="system\DataProvider.cs" />
123 123
     <Compile Include="system\KeyboardHookCommon.cs" />
124 124
     <Compile Include="system\MouseEventCommon.cs" />
125
+    <Compile Include="system\NumUtil.cs" />
125 126
     <Compile Include="system\PdfTrunImage.cs" />
126 127
     <Compile Include="system\BlackboardNew.cs" />
127 128
     <Compile Include="system\CameraHelper.cs" />

+ 115
- 0
Common/system/FFMpeg.cs View File

@@ -22,6 +22,7 @@ namespace Common.system
22 22
     /// </summary>
23 23
     public class FFMpeg
24 24
     {
25
+        #region 变量
25 26
         public Process myProcess = null;
26 27
 
27 28
         /// <summary>
@@ -42,6 +43,120 @@ namespace Common.system
42 43
         /// 是否可以录制麦克风
43 44
         /// </summary>
44 45
         private bool IsRecordMicrophone = true;
46
+        #endregion
47
+
48
+        #region 直播录屏推流
49
+        /// <summary>
50
+        /// 录制屏幕并推流
51
+        /// </summary>
52
+        /// <param name="RTMPPath">RTMP流媒体服务器</param>
53
+        /// <param name="NodeKey">节点和Key</param>
54
+        /// <param name="size">大小</param>
55
+        /// <param name="ErrMessage">错误信息返回</param>
56
+        /// <returns></returns>
57
+        public bool StartRecordingVideo(string RTMPPath, string NodeKey, Size size, out string ErrMessage)
58
+        {
59
+            while (myProcess != null)
60
+            {
61
+                Thread.Sleep(100);
62
+            }
63
+            ErrMessage = null;
64
+            string RTMPPathName = "rtmp://" + RTMPPath + "/" + NodeKey;//rtmp://live2.xhkjedu.com/live/test
65
+            Process[] KillProcessArray = Process.GetProcessesByName("ffmpeg");
66
+            foreach (Process KillProcess in KillProcessArray)
67
+            {
68
+                KillProcess.Kill();
69
+            }
70
+            myProcess = new Process();
71
+            LogPath = CreateffmpegLog();
72
+            string MicrophoneName = null;
73
+            #region 检测麦克风扬声器
74
+            string AudioPath = FileToolsCommon.GetFileAbsolutePath("/temp/audio/");
75
+            FileToolsCommon.CreateDirectory(AudioPath);
76
+            string audioSpeakerPath = AudioPath + "adoS" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".m";//FileToolsCommon.GetFileAbsolutePath("adoS.m");
77
+            string audioMicrophonePath = AudioPath + "adoM" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".m";//FileToolsCommon.GetFileAbsolutePath("adoM.m");
78
+            try
79
+            {
80
+                FileToolsCommon.DeleteFile(audioSpeakerPath);
81
+                FileToolsCommon.DeleteFile(audioMicrophonePath);
82
+            }
83
+            catch (Exception)
84
+            {
85
+
86
+            }
87
+            if (StartRecordSpeakerAudio(audioSpeakerPath))
88
+            {
89
+                IsRecordSpeaker = true;
90
+            }
91
+            else
92
+            {
93
+                //无法录制扬声器音频
94
+                IsRecordSpeaker = false;
95
+            }
96
+            StopRecordAudio(2);
97
+            Thread.Sleep(100);
98
+            if (StartRecordAudio(audioMicrophonePath))
99
+            {
100
+                IsRecordMicrophone = true;
101
+            }
102
+            else
103
+            {
104
+                //无法录制麦克风
105
+                IsRecordMicrophone = false;
106
+            }
107
+            StopRecordAudio(1);
108
+            #endregion
109
+            myProcess.StartInfo.FileName = FileToolsCommon.GetFileAbsolutePath(@"/ffmpeg/bin/ffmpeg.exe");   //ffmpeg.exe的绝对路径
110
+            string SpeakerStr = "";
111
+            string MicrophoneStr = "";
112
+            if (IsRecordSpeaker)
113
+            {
114
+                SpeakerStr = "-f dshow -i audio=\"virtual-audio-capturer\" ";
115
+            }
116
+            if (IsRecordMicrophone)
117
+            {
118
+                MicrophoneName = GetMicrophoneName();
119
+                if (!string.IsNullOrWhiteSpace(MicrophoneName))
120
+                {
121
+                    MicrophoneStr = "-f dshow -i audio=\"" + MicrophoneName + "\" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 ";
122
+                }
123
+            }
124
+
125
+            myProcess.StartInfo.Arguments = SpeakerStr + MicrophoneStr + " -f gdigrab -framerate 6 -offset_x 0 -offset_y 0 -video_size " + size.Width + "x" + size.Height + " -i desktop -pix_fmt yuv420p -vf scale=trunc(iw/4)*2:trunc(ih/4)*2 -r 15 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec aac -f flv " + RTMPPathName;
126
+
127
+            if (OutputVideoLog)
128
+            {
129
+                LogHelper.WriteInfoLog("【录屏】:" + myProcess.StartInfo.Arguments);
130
+            }
131
+            FileToolsCommon.AppendText(LogPath, "【录屏】:" + myProcess.StartInfo.Arguments + "\r\n");
132
+            myProcess.StartInfo.UseShellExecute = false;           //不使用操作系统外壳程序启动
133
+            myProcess.StartInfo.RedirectStandardError = true;      //重定向标准错误输出
134
+            myProcess.StartInfo.CreateNoWindow = true;             //不显示程序窗口
135
+            myProcess.StartInfo.RedirectStandardInput = true;      //用于模拟该进程控制台的输入
136
+            myProcess.ErrorDataReceived += new DataReceivedEventHandler(Output);
137
+            try
138
+            {
139
+                myProcess.Start();
140
+                myProcess.BeginErrorReadLine();
141
+            }
142
+            catch (Exception ex)
143
+            {
144
+                if (ex.Message.Contains("访问"))
145
+                {
146
+                    ErrMessage = "访问被拒绝,请关闭杀毒软件或新任此软件后重试!";
147
+                }
148
+                else
149
+                {
150
+                    ErrMessage = ex.Message + " 请关闭杀毒软件或信任此软件后重试!";
151
+                }
152
+                LogHelper.WriteErrLog("【录音】(StartRecordingAudio)" + ErrMessage, ex);
153
+                myProcess.Dispose();
154
+                myProcess = null;
155
+                return false;
156
+            }
157
+            return true;
158
+        }
159
+        #endregion
45 160
         /// <summary>
46 161
         /// 录制屏幕
47 162
         /// </summary>

+ 18
- 0
Common/system/NumUtil.cs View File

@@ -0,0 +1,18 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace Common.system
8
+{
9
+    public class NumUtil
10
+    {
11
+        public static int unixTime()
12
+        {
13
+            double ms = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds;
14
+            int msl = (int)ms;
15
+            return msl;
16
+        }
17
+    }
18
+}

+ 72
- 0
XHZB.DAL/Class1.cs View File

@@ -0,0 +1,72 @@
1
+using Common.system;
2
+
3
+using Newtonsoft.Json.Linq;
4
+
5
+using System;
6
+using System.Collections.Generic;
7
+using System.Linq;
8
+using System.Text;
9
+using System.Threading;
10
+using System.Threading.Tasks;
11
+
12
+namespace XHZB.DAL
13
+{
14
+    public class Class1
15
+    {
16
+        /// <summary>
17
+        /// API请求地址
18
+        /// </summary>
19
+        private string APIRequestAddress = FileToolsCommon.GetConfigValue("APIRequestAddress");
20
+        /// <summary>
21
+        /// 文件请求地址
22
+        /// </summary>
23
+        private string FileRequestAddress = FileToolsCommon.GetConfigValue("FileRequestAddress");
24
+        /// <summary>
25
+        /// 测试
26
+        /// </summary>
27
+        /// <param name="Message"></param>
28
+        /// <returns></returns>
29
+        public bool test( string FileCode, out string Message)
30
+        {
31
+
32
+            Exception ex = null;
33
+            Message = "";//请求重试5次 共5秒
34
+            for (int num = 0; num < 5; num++)
35
+            {
36
+                try
37
+                {
38
+                    JObject jo = HttpHelper.PostFunction(FileRequestAddress + @"/chunkdb/mergechunk", @"application/x-www-form-urlencoded", @"identifier=" + FileCode, "");
39
+                    if (jo == null)
40
+                    {
41
+                        Message = "无法访问文件服务器,请检查网络或文件服务器地址。";
42
+                        return false;
43
+                    }
44
+                    //Model.ResultVo<Model_ResourceAddTwo> resultObj = JsonHelper.JsonToObj<Model.ResultVo<Model_ResourceAddTwo>>(jo.ToString());
45
+                    //APP.ResourceAddTwo = new Model_ResourceAddTwo();
46
+                    ////0成功,1失败
47
+                    //if (resultObj.code == 0 && resultObj.obj != null)
48
+                    //{
49
+                    //    APP.ResourceAddTwo = resultObj.obj;
50
+                        
51
+                    //    return true;
52
+                    //}
53
+                    //else
54
+                    //{
55
+                    //    //Message = "上传失败!";
56
+                    //    Message = jo["msg"].ToString();
57
+                    //    return false;
58
+                    //}
59
+                }
60
+                catch (Exception e)
61
+                {
62
+                    Message = e.Message;
63
+                    ex = e;
64
+                    Thread.Sleep(1000);
65
+                }
66
+            }
67
+            string ErrMessage = "【请求失败】(test):请求失败。" + Message;
68
+            LogHelper.WriteErrLog(ErrMessage, ex);
69
+            return false;
70
+        }
71
+    }
72
+}

+ 36
- 0
XHZB.DAL/Properties/AssemblyInfo.cs View File

@@ -0,0 +1,36 @@
1
+using System.Reflection;
2
+using System.Runtime.CompilerServices;
3
+using System.Runtime.InteropServices;
4
+
5
+// 有关程序集的一般信息由以下
6
+// 控制。更改这些特性值可修改
7
+// 与程序集关联的信息。
8
+[assembly: AssemblyTitle("XHZB.DAL")]
9
+[assembly: AssemblyDescription("")]
10
+[assembly: AssemblyConfiguration("")]
11
+[assembly: AssemblyCompany("")]
12
+[assembly: AssemblyProduct("XHZB.DAL")]
13
+[assembly: AssemblyCopyright("Copyright ©  2021")]
14
+[assembly: AssemblyTrademark("")]
15
+[assembly: AssemblyCulture("")]
16
+
17
+// 将 ComVisible 设置为 false 会使此程序集中的类型
18
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
19
+//请将此类型的 ComVisible 特性设置为 true。
20
+[assembly: ComVisible(false)]
21
+
22
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23
+[assembly: Guid("45c8855f-093c-4f92-b9a7-ad3e91c97c06")]
24
+
25
+// 程序集的版本信息由下列四个值组成: 
26
+//
27
+//      主版本
28
+//      次版本
29
+//      生成号
30
+//      修订号
31
+//
32
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
33
+//通过使用 "*",如下所示:
34
+// [assembly: AssemblyVersion("1.0.*")]
35
+[assembly: AssemblyVersion("1.0.0.0")]
36
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 62
- 0
XHZB.DAL/XHZB.DAL.csproj View File

@@ -0,0 +1,62 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
4
+  <PropertyGroup>
5
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
7
+    <ProjectGuid>{45C8855F-093C-4F92-B9A7-AD3E91C97C06}</ProjectGuid>
8
+    <OutputType>Library</OutputType>
9
+    <AppDesignerFolder>Properties</AppDesignerFolder>
10
+    <RootNamespace>XHZB.DAL</RootNamespace>
11
+    <AssemblyName>XHZB.DAL</AssemblyName>
12
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
13
+    <FileAlignment>512</FileAlignment>
14
+    <Deterministic>true</Deterministic>
15
+  </PropertyGroup>
16
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
17
+    <DebugSymbols>true</DebugSymbols>
18
+    <DebugType>full</DebugType>
19
+    <Optimize>false</Optimize>
20
+    <OutputPath>bin\Debug\</OutputPath>
21
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
22
+    <ErrorReport>prompt</ErrorReport>
23
+    <WarningLevel>4</WarningLevel>
24
+  </PropertyGroup>
25
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
26
+    <DebugType>pdbonly</DebugType>
27
+    <Optimize>true</Optimize>
28
+    <OutputPath>bin\Release\</OutputPath>
29
+    <DefineConstants>TRACE</DefineConstants>
30
+    <ErrorReport>prompt</ErrorReport>
31
+    <WarningLevel>4</WarningLevel>
32
+  </PropertyGroup>
33
+  <ItemGroup>
34
+    <Reference Include="log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
35
+      <SpecificVersion>False</SpecificVersion>
36
+      <HintPath>..\Common\dlls\log4net.dll</HintPath>
37
+    </Reference>
38
+    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
39
+      <SpecificVersion>False</SpecificVersion>
40
+      <HintPath>..\Common\dlls\Newtonsoft.Json.dll</HintPath>
41
+    </Reference>
42
+    <Reference Include="System" />
43
+    <Reference Include="System.Core" />
44
+    <Reference Include="System.Xml.Linq" />
45
+    <Reference Include="System.Data.DataSetExtensions" />
46
+    <Reference Include="Microsoft.CSharp" />
47
+    <Reference Include="System.Data" />
48
+    <Reference Include="System.Net.Http" />
49
+    <Reference Include="System.Xml" />
50
+  </ItemGroup>
51
+  <ItemGroup>
52
+    <Compile Include="Class1.cs" />
53
+    <Compile Include="Properties\AssemblyInfo.cs" />
54
+  </ItemGroup>
55
+  <ItemGroup>
56
+    <ProjectReference Include="..\Common\Common.csproj">
57
+      <Project>{808a7075-5af5-46b3-8ef6-514c0b5fa8d7}</Project>
58
+      <Name>Common</Name>
59
+    </ProjectReference>
60
+  </ItemGroup>
61
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
62
+</Project>

+ 10
- 0
XHZB.Desktop/App.config View File

@@ -16,5 +16,15 @@
16 16
     <add key="userName" value="" />
17 17
     <add key="password" value="" />
18 18
     <add key="isRemind" value="" />
19
+    <!--流媒体服务器地址-->
20
+    <add key="ServerPath" value="live2.xhkjedu.com"/>
21
+    <!--API请求地址-->
22
+    <add key="APIRequestAddress" value="http://schoolapi.xhkjedu.com" />
23
+    <!--文件平台请求地址-->
24
+    <add key="FileRequestAddress" value="http://schoolfile.xhkjedu.com" />
25
+    <!--展示文件服务器请求地址-->
26
+    <add key="SchoolfileRequestAddress" value="http://schoolfile.xhkjedu.com" />
27
+    <!--认证请求地址-->
28
+    <add key="CertapiRequestAddress" value="http://certapi.xhkjedu.com" />
19 29
   </appSettings>
20 30
 </configuration>

+ 35
- 3
XHZB.Desktop/App.cs View File

@@ -1,4 +1,5 @@
1
-using Common.system;
1
+using Common;
2
+using Common.system;
2 3
 
3 4
 using System;
4 5
 using System.Collections.Generic;
@@ -22,6 +23,18 @@ namespace XHZB.Desktop
22 23
         /// </summary>
23 24
         public static bool isDebug = FileToolsCommon.GetConfigValue("IsDebug") != "0";
24 25
         /// <summary>
26
+        /// RTMP服务器地址
27
+        /// </summary>
28
+        public static string RTMPServerPath = FileToolsCommon.GetConfigValue("ServerPath");
29
+        /// <summary>
30
+        /// AES账号加密字符串
31
+        /// </summary>
32
+        public static string AESAccountStr = null;
33
+        /// <summary>
34
+        /// AES密码加密字符串
35
+        /// </summary>
36
+        public static string AESPassWordStr = null;
37
+        /// <summary>
25 38
         /// 接口地址
26 39
         /// </summary>
27 40
         public static string apiUrl = isDebug ? "http://schoolapitest.xhkjedu.com" : FileToolsCommon.GetConfigValue("APIRequestAddress");
@@ -222,14 +235,33 @@ namespace XHZB.Desktop
222 235
         public static PracticeWindow W_PracticeWindow = null;
223 236
         #endregion
224 237
         #endregion
225
-
238
+        /// <summary>
239
+        /// 启动入口
240
+        /// </summary>
241
+        /// <param name="args">参数1:账号加密字符串 参数1:密码加密字符串</param>
226 242
         [STAThread]
227
-        private static void Main()
243
+        private static void Main(string[] args)
228 244
         {
229 245
             myloading = new LoadDialog();
230 246
             StopSameProcess();
231 247
             Killffmpeg();
232 248
             try
249
+            {
250
+                if (args != null&&args.Length>1)
251
+                {
252
+                    AESAccountStr = args[0];
253
+                    AESPassWordStr = args[1];
254
+                    ////解密
255
+                    //string Account= AESHelper.AESDecrypt(AESAccountStr);
256
+                    //string PassWord = AESHelper.AESDecrypt(AESPassWordStr);
257
+                }
258
+            }
259
+            catch (Exception ex)
260
+            {
261
+                LogHelper.WriteErrLog("参数接收失败:" + ex.Message, ex);
262
+                throw;
263
+            }
264
+            try
233 265
             {
234 266
                 WindowsIdentity identity = WindowsIdentity.GetCurrent();
235 267
                 WindowsPrincipal principal = new WindowsPrincipal(identity);

+ 93
- 2
XHZB.Desktop/ToolbarWindow.xaml.cs View File

@@ -50,7 +50,7 @@ namespace XHZB.Desktop
50 50
         {
51 51
             InitializeComponent();
52 52
 
53
-
53
+            txbName.Text = APP.LoginUser.username;
54 54
 
55 55
             heiban_btn.Click += Heiban_btn_Click;
56 56
             pizhu_btn.Click += Pizhu_btn_Click;
@@ -659,6 +659,74 @@ namespace XHZB.Desktop
659 659
 
660 660
             story.Begin();
661 661
         }
662
+        /// <summary>
663
+        /// 工具栏打开与缩放
664
+        /// </summary>
665
+        /// <param name="toolShow"></param>
666
+        /// <param name="target"></param>
667
+        /// <param name="contentList"></param>
668
+        private void hideOrShowToolbar(bool toolShow, DependencyObject target, List<DependencyObject> contentList)
669
+        {
670
+            if (txbName.Visibility == Visibility.Visible)
671
+            {
672
+                txbName.Visibility = Visibility.Collapsed;
673
+                //if ("正在共享".Equals(pageData.menuList[1].Name))
674
+                //{
675
+                //    gridAnimated.Visibility = Visibility.Collapsed;
676
+                //}
677
+            }
678
+            else
679
+            {
680
+                txbName.Visibility = Visibility.Visible;
681
+                //if("正在共享".Equals(pageData.menuList[1].Name))
682
+                //{
683
+                //    gridAnimated.Visibility = Visibility.Visible;
684
+                //}
685
+            }
686
+
687
+            Storyboard story = new Storyboard();
688
+            DoubleAnimation da = new DoubleAnimation();
689
+            if (toolShow)
690
+            {
691
+                da.From = 0;
692
+                da.To = 670;
693
+            }
694
+            else
695
+            {
696
+                da.From = 670;
697
+                da.To = 0.0;
698
+            }
699
+
700
+            //可选属性:是否往返播放
701
+            da.AutoReverse = false;
702
+            //da.RepeatBehavior = RepeatBehavior.Forever;
703
+            //da.RepeatBehavior = new RepeatBehavior(2);
704
+            da.Duration = new Duration(TimeSpan.FromSeconds(0.3));
705
+            Storyboard.SetTarget(da, target);
706
+            Storyboard.SetTargetProperty(da, new PropertyPath("Height"));
707
+            story.Children.Add(da);
708
+
709
+            foreach (DependencyObject item in contentList)
710
+            {
711
+                DoubleAnimation da2 = new DoubleAnimation();
712
+                if (toolShow)
713
+                {
714
+                    da2.From = 0;
715
+                    da2.To = 1.0;
716
+                }
717
+                else
718
+                {
719
+                    da2.From = 1.0;
720
+                    da2.To = 0.0;
721
+                }
722
+                da2.Duration = new Duration(TimeSpan.FromSeconds(0.1));
723
+                Storyboard.SetTarget(da2, item);
724
+                Storyboard.SetTargetProperty(da2, new PropertyPath("Opacity"));
725
+                story.Children.Add(da2);
726
+            }
727
+
728
+            story.Begin();
729
+        }
662 730
         private void toolbar_win_Closed(object sender, EventArgs e)
663 731
         {
664 732
 
@@ -678,10 +746,33 @@ namespace XHZB.Desktop
678 746
         {
679 747
 
680 748
         }
681
-
749
+        private int time = NumUtil.unixTime();
682 750
         private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
683 751
         {
752
+            int temptime = NumUtil.unixTime();
753
+            if (temptime - time < 1)
754
+            {
755
+                pageData.IsOpen = !pageData.IsOpen;
684 756
 
757
+                List<DependencyObject> list = new List<DependencyObject>
758
+                {
759
+                    toolbar_list
760
+                };
761
+
762
+                hideOrShowToolbar(pageData.IsOpen, toolbar, list);
763
+
764
+                if (!pageData.IsOpen)
765
+                {
766
+                    if (heibanshow)
767
+                    {
768
+                        List<DependencyObject> list3 = new List<DependencyObject>();
769
+                        heibanshow = false;
770
+                        list3.Add(heiban_btn);
771
+                        list3.Add(pizhu_btn);
772
+                        hideOrShow(heibanshow, ketangTool, list3);
773
+                    }
774
+                }
775
+            }
685 776
         }
686 777
         /// <summary>
687 778
         /// 工具栏移动事件

+ 4
- 0
XHZB.Desktop/XHZB.Desktop.csproj View File

@@ -191,6 +191,10 @@
191 191
       <Project>{808a7075-5af5-46b3-8ef6-514c0b5fa8d7}</Project>
192 192
       <Name>Common</Name>
193 193
     </ProjectReference>
194
+    <ProjectReference Include="..\XHZB.DAL\XHZB.DAL.csproj">
195
+      <Project>{45c8855f-093c-4f92-b9a7-ad3e91c97c06}</Project>
196
+      <Name>XHZB.DAL</Name>
197
+    </ProjectReference>
194 198
     <ProjectReference Include="..\XHZB.Model\XHZB.Model.csproj">
195 199
       <Project>{fc00ab0b-da8c-46be-aad5-8d8a7fb8c767}</Project>
196 200
       <Name>XHZB.Model</Name>

+ 6
- 0
XHZB.sln View File

@@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XHZB.Desktop", "XHZB.Deskto
9 9
 EndProject
10 10
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XHZB.Model", "XHZB.Model\XHZB.Model.csproj", "{FC00AB0B-DA8C-46BE-AAD5-8D8A7FB8C767}"
11 11
 EndProject
12
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XHZB.DAL", "XHZB.DAL\XHZB.DAL.csproj", "{45C8855F-093C-4F92-B9A7-AD3E91C97C06}"
13
+EndProject
12 14
 Global
13 15
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 16
 		Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,10 @@ Global
27 29
 		{FC00AB0B-DA8C-46BE-AAD5-8D8A7FB8C767}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 30
 		{FC00AB0B-DA8C-46BE-AAD5-8D8A7FB8C767}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 31
 		{FC00AB0B-DA8C-46BE-AAD5-8D8A7FB8C767}.Release|Any CPU.Build.0 = Release|Any CPU
32
+		{45C8855F-093C-4F92-B9A7-AD3E91C97C06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
33
+		{45C8855F-093C-4F92-B9A7-AD3E91C97C06}.Debug|Any CPU.Build.0 = Debug|Any CPU
34
+		{45C8855F-093C-4F92-B9A7-AD3E91C97C06}.Release|Any CPU.ActiveCfg = Release|Any CPU
35
+		{45C8855F-093C-4F92-B9A7-AD3E91C97C06}.Release|Any CPU.Build.0 = Release|Any CPU
30 36
 	EndGlobalSection
31 37
 	GlobalSection(SolutionProperties) = preSolution
32 38
 		HideSolutionNode = FALSE

Loading…
Cancel
Save