Minecraft(我的世界)中文论坛

标题: KMCCC使用教程(使用量超过360w的C#游戏启动核心|2017年11月15日更新)

作者: gamerteam    时间: 2015-8-24 12:44
标题: KMCCC使用教程(使用量超过360w的C#游戏启动核心|2017年11月15日更新)
KMCCC(Kblack's Minecraft Core Code)是Kblack(@zhouyiran2 )制作的一个C#版的启动核心,拥有以下优点

功能多:包含Json解析(LitJson),Java路径获取,Versions版本获取,文件解压,系统信息获取,以及Libraries文件获取、MojangAPI等。
开源:任何人都可以免费使用,如需修改源码,请务必遵守LGPL协议。
简单:启动只需要几句代码即可。


使用本启动核心的服务器/启动器有:

中国Minecraft口袋妖怪服务器群组(BakaXL)


MC部落(mclansLauncher)


Minecraft星空物语群组服(McxkLauncher)


MCMV3



适用人群:拥有C#一定基础的开发者

Github链接:https://github.com/MineStudio/KMCCC
使用KMCCC的Demo启动器:https://github.com/MineStudio/MCMV3


注意事项
考虑到大部分新手都是使用WinForm开发,本文以WinForm为例,同时我也会标注一些WPF可能不同的代码。

KMCCC需要.net framework 4.0的开发环境,用户也需要安装.net framework 4.0才可以使用


目录


1.启动游戏

2.错误信息的处理

3.游戏信息和Java的获取

4.高级工具的使用(1)

5.高级工具的使用(2)





注:原作者已经放弃本项目,除重大BUG将不会再进行更新,我将继续做KMCCC的更新维护工作。


(PS:吐槽一句,上面的启动器大部分我都参与了开发)
如果你对KMCCC的使用有疑问,欢迎帖子留言,我会尽量帮助你完成属于你的启动器!

KMCCC更新记录:
0.9.5.4:修正了不兼容老版本(例如1.7.2)的Assets读取目录错误问题,修正了1.9.4Forge无法加载Assets的问题,添加了自定义验证服务器设置
0.9.5.6:添加Version_Type设置,默认为KMCCC
0.9.5.7:兼容17w43b版本后修改的JSON格式,KMCCC.Pro增加MojangAPI(目前有销量查询与MojangAPI服务状态查询)
作者: gamerteam    时间: 2015-8-24 13:45
标题: 1.启动游戏和版本获取
本帖最后由 gamerteam 于 2016-3-27 02:42 编辑

使用前的准备:
启动游戏非常简单,只需要一行代码即可。

在这之前,先添加KMCCC.Pro.dll的引用(DLL文件请自行克隆Github的项目,然后编译。注意,编译KMCCC需要你的电脑安装了WindowsSDK。以及再次强调,如果你没有任何C#基础,请放弃本文)


然后打开Program.cs(如果是WPF则是App.xmal.cs)添加KMCCC的引用:
  1. using KMCCC.Launcher;
复制代码


然后在入口处添加以下代码
  1. public static LauncherCore Core = LauncherCore.Create();
复制代码

如图所示

同时建议添加以下代码,方便KMCCC统计你启动器的使用量和启动情况(KMCCC将会严格保护用户隐私,只反馈启动信息和系统配置信息,你随时可以取消反馈)
  1. Reporter.SetClientName("启动器名称+版本");
复制代码



然后在主窗口添加一个ComboBox和Button控件,后面会用到。

获取版本列表:
在窗口事件上面(双击标题栏即可),添加以下代码:WinForm后台代码
  1.             var versions = Program.Core.GetVersions().ToArray();
  2.             comboBox1.DataSource = versions;//绑定数据源
  3.             comboBox1.DisplayMember = "Id";//设置comboBox显示的为版本Id
复制代码

WPF xmal代码:
  1. <ComboBox x:Name="comboBox1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="168" DisplayMemberPath="Id" />
复制代码
DisplayMemberPath="Id" 为关键,等同于上面的comboBox1.DisplayMember = "Id";


启动游戏:
接下来在Button事件上,添加以下代码
  1. var ver = (KMCCC.Launcher.Version)comboBox1.SelectedItem;
  2. var result = Program.Core.Launch(new LaunchOptions
  3. {
  4. Version = ver, //Ver为Versions里你要启动的版本名字
  5. MaxMemory = 1024, //最大内存,int类型
  6. Authenticator = new OfflineAuthenticator("ZhaiSoul"), //离线启动,ZhaiSoul那儿为你要设置的游戏名
  7. //Authenticator = new YggdrasilLogin("邮箱", "密码", true), // 正版启动,最后一个为是否twitch登录
  8. Mode = LaunchMode.MCLauncher, //启动模式,这个我会在后面解释有哪几种
  9. Server = new ServerInfo {Address = "服务器IP地址",Port="服务器端口"}, //设置启动游戏后,自动加入指定IP的服务器,可以不要
  10. Size = new WindowSize {Height = 768, Width = 1280} //设置窗口大小,可以不要
  11. });
复制代码


测试前的准备:
然后进入程序编译后的文件夹(默认为bin/debug),复制一个.minecraft进去(只需要包含Libraries和Versions即可)


然后编译并运行,效果如下:




其他信息:
Authenticator为验证模式,有离线启动和正版验证两种,详见上面的代码。

Mode为启动模式,KMCCC拥有三种启动模式,分别为默认、BMCL、MCLauncher模式

默认:设置游戏的默认加载目录为.minecraft(即Mods,resourcepacks等文件将放在.minecraft中)
BMCL模式:复制coremods到Versions/版本 里,参见BMCL的启动模式
MCLauncher模式:Mods和resourcepacks等资源文件均放在Versions/版本 里面,适合有不同游戏版本的客户端


作者: gamerteam    时间: 2015-8-24 14:13
标题: 2.启动错误信息的处理
本帖最后由 gamerteam 于 2015-8-26 01:55 编辑

不是每个用户都会处理错误的,所以这时候我们需要错误信息来提示他们怎么解决。

我们只需在上面的启动代码后面,加上以下代码即可

当然,如果你想出错后弄一个自动修复什么的也是可以的,不过那需要你自己研究了{:10_525:}

  1.             if (!result.Success)
  2.             {
  3.                 //MessageBox.Show(result.ErrorMessage, result.ErrorType.ToString());
  4.                 switch (result.ErrorType)
  5.                 {
  6.                     case ErrorType.NoJAVA:
  7.                         MessageBox.Show("你系统的Java有异常,可能你非正常途径删除过Java,请尝试重新安装Java\n详细信息:" + result.ErrorMessage,"错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  8.                         break;
  9.                     case ErrorType.AuthenticationFailed:
  10.                         MessageBox.Show(this, "正版验证失败!请检查你的账号密码", "账号错误\n详细信息:" + result.ErrorMessage,MessageBoxButtons.OK,MessageBoxIcon.Error);
  11.                         break;
  12.                     case ErrorType.UncompressingFailed:
  13.                         MessageBox.Show(this, "可能的多开或文件损坏,请确认文件完整且不要多开\n如果你不是多开游戏的话,请检查libraries文件夹是否完整\n详细信息:" + result.ErrorMessage, "可能的多开或文件损坏",MessageBoxButtons.OK,MessageBoxIcon.Error);
  14.                         break;
  15.                     default:
  16.                         MessageBox.Show(this,
  17.                             result.ErrorMessage + "\n" +
  18.                             (result.Exception == null ? string.Empty : result.Exception.StackTrace),
  19.                             "启动错误,请将此窗口截图向开发者寻求帮助");
  20.                         break;
  21.                 }
  22.             }
复制代码



这里我们将libraries改名一下,然后再启动游戏,就会出现以下错误:

我这里给一些开发者一些提示,比如上面的,缺少libraries会出现文件解压错误,建议搭配BMCLAPI下载缺失的libraries文件,怎么获取缺少哪些libraries文件,我将会在后面的章节进行说明。


作者: gamerteam    时间: 2015-8-24 19:02
标题: 游戏信息和Java的获取
本帖最后由 gamerteam 于 2015-11-11 13:16 编辑

Libraries丢失的文件列表获取:
我们知道,玩家可能会丢失一些重要的文件,导致MC无法正常开启(Assets丢失后只是无声或者不能中文,所以KMCCC目前还没获取丢失Assets哪些文件的功能),所以我们要知道,玩家到底丢了哪些文件。

首先,创建一个List<T>,例如
  1. private List<string> lostFlie = new List<string>();
复制代码

然后在我们上面写的启动事件上面,添加以下代码

  1.             lostFlie.Clear();//清空列表,防止重新启动后,列表重复
  2.             var core = LauncherCore.Create();
  3.             var version = Program.Core.GetVersion(comboBox1.Text);//设置读取的版本配置为当前选择的项
  4.             try
  5.             {
  6.                 var libs = version.Libraries.Select(lib => core.GetLibPath(lib));

  7.                 var natives = version.Natives.Select(native => core.GetNativePath(native));
  8.                 foreach (string libflie in libs)
  9.                 {
  10.                     if (!File.Exists(libflie))
  11.                     {
  12.                         //MessageBox.Show("当前缺少的Libraries文件有:" + libflie);
  13.                         lostFlie.Add(libflie);
  14.                     }
  15.                 }

  16.                 foreach (string libflie in natives)
  17.                 {
  18.                     if (!File.Exists(libflie))
  19.                     {
  20.                         //MessageBox.Show("当前缺少的Libraries-natives文件有:" + libflie);
  21.                         lostFlie.Add(libflie);
  22.                     }
  23.                 }
  24.                 MessageBox.Show("一共缺少"+lostFlie.Count+"个文件");
  25.                 return;//返回一个值,中止继续执行后面的代码
  26.             }
  27.             catch
  28.             {
  29.                 MessageBox.Show("版本信息获取失败!请确认已选择正确的核心版本");
  30.             }
复制代码




效果如图:


还记得我们之前改了Libraries文件名字的吧?现在来试试吧!看提示我们缺少哪些文件!



至于怎么配合BMCLAPI下载缺失的文件呢?这个就属于研究项目了,各位自行研究吧,其实很简单的。(提示:去掉Libraries前面的路径名,只保留文件在.minecraft里的路径,例如\libraries\org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jar,然后在修改后的路径名前面加上bmclapi的地址即可)


Java路径的获取
KMCCC自带了Java路径的获取工具,我们可以非常方便的读取玩家电脑里已经安装了哪些Java。
(我们更推崇不提供Java设置功能,让玩家自行安装完整版的Java。)

我们先给我们的窗口,添加一个TextBox(这只是举一个例子)



然后在窗口事件中,添加以下代码


  1. textBox1.Text = KMCCC.Tools.SystemTools.FindJava().Last();//textbox1显示我们找到的最后一个Java(也是最近安装的一个)
复制代码

效果如下:



注意!如果玩家电脑里没有安装Java,直接这样搜索会导致崩溃!

你需要加一个try来进行修复。
例如
  1. try{
复制代码



当然,要注意,KMCCC.Tools.SystemTools.FindJava()返回的是一个列表,.First()的意思是显示列表中的第一个。

你也可以再改进一下,让玩家自己选择使用哪个Java,就像下面这样。


很简单,就交给你们自己研究了。总之要用到.ToList()就对了

注意,并不支持绿色版的Java,如果玩家是通过非正常方式卸载的Java(例如直接删除)的话,注册表是会有残留信息的,我们依然会检测到那个并不存在的Java。

(PS:WinForm用得我想死了,还是建议大家试试WPF吧)



作者: gamerteam    时间: 2015-8-24 19:04
本帖最后由 gamerteam 于 2015-11-4 02:39 编辑

相信用的人已经发现,版本选择是不允许string类型的,如果我想默认选择一个版本,或者我知道那个版本名字是多少,该怎么做呢?
这时候就需要用到GetVersion工具了。使用方法如下:

  1. var core = LauncherCore.Create();
  2. var Launchversion = core.GetVersion("版本名字");
复制代码


然后在启动版本选择位置,就可以使用Launchversion了

  1.             var result = Program.Core.Launch(new LaunchOptions{
  2.                     Version = Launchversion , //Ver为Versions里你要启动的版本名字
  3.                     MaxMemory = 1024, //最大内存,int类型
  4.                     Authenticator = new OfflineAuthenticator("ZhaiSoul"), //离线启动,ZhaiSoul那儿为你要设置的游戏名
  5.                     //Authenticator = new YggdrasilLogin("邮箱", "密码", true), // 正版启动,最后一个为是否twitch登录
  6.                     Mode = LaunchMode.MCLauncher, //启动模式,这个我会在后面解释有哪几种
  7.                     Server = new ServerInfo {Address = "服务器IP地址"}, //设置启动游戏后,自动加入指定IP的服务器,可以不要
  8.                     Size = new WindowSize {Height = 768, Width = 1280} //设置窗口大小,可以不要
  9.                 });
复制代码



作者: gamerteam    时间: 2015-8-24 19:05
本帖最后由 gamerteam 于 2015-8-27 11:54 编辑

高级工具的更新将会暂缓,因为确实KMCCC的功能略多,就前面的教程已经足够写一个完整的启动器了。本贴待更新将更新更多实用功能,例如修改游戏标题,系统信息获取等
只接受提问和指导,如需定制启动器,详见我签名


作者: gamerteam    时间: 2015-8-24 19:05
占楼,待更新
作者: 8900581    时间: 2015-8-24 22:22
楼主发本帖后既易语言成为启动器广泛使用的语言后,C#成为了第二大启动器语言
作者: gamerteam    时间: 2015-8-24 23:13
8900581 发表于 2015-8-24 22:22
楼主发本帖后既易语言成为启动器广泛使用的语言后,C#成为了第二大启动器语言 ...

C#做启动器本来就很容易,其实不管什么语言,只要你会了基础,然后随便网上搜一个json解析工具,自己就可以写一个启动器了
作者: 8900581    时间: 2015-8-25 00:23
gamerteam 发表于 2015-8-24 23:13
C#做启动器本来就很容易,其实不管什么语言,只要你会了基础,然后随便网上搜一个json解析工具,自己就可 ...

易语言更容易,XX模块_游戏启动()
手动斜眼
作者: gamerteam    时间: 2015-8-25 10:04
8900581 发表于 2015-8-25 00:23
易语言更容易,XX模块_游戏启动()
手动斜眼

这也是模块,启动游戏和版本选择,就上面的代码已经搞定
作者: tallmoon    时间: 2015-8-25 13:41
支持楼主,表示楼主教程写的很棒
作者: gamerteam    时间: 2015-8-26 01:52
tallmoon 发表于 2015-8-25 13:41
支持楼主,表示楼主教程写的很棒

{:10_510:}不给人气就不更,啦啦啦啦啦
作者: tdiant    时间: 2015-8-26 11:37
100个使用C#和BakaXL的理由
作者: MontyKayla    时间: 2015-8-26 17:03
{:10_492:}写得很详细嘛 (听说楼主是个小萝莉,而且只有12岁,然而却被kblack爆过,太残忍了,太变态了
作者: ←_←←_←    时间: 2015-8-26 17:04
看起来不错(可惜我不会C#),据说lz是十二岁的小萝莉,支持十二岁的小萝莉~= =
作者: BlueCraft    时间: 2015-8-26 17:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: tallmoon    时间: 2015-8-27 09:41
gamerteam 发表于 2015-8-24 19:05
高级工具的更新将会暂缓,因为确实KMCCC的功能略多,就前面的教程已经足够写一个完整的启动器了。本贴待更 ...

出一个 读写配置文件的教程呗
作者: gamerteam    时间: 2015-8-27 10:12
tallmoon 发表于 2015-8-27 09:41
出一个 读写配置文件的教程呗

读写配置文件那不属于KMCCC的功能了,但是也很简单,WPF的话建议使用xml,WinForm的话,可以试试WinAPI的ini读取
作者: poi4399    时间: 2015-8-27 10:54
╭(°A°`)╮有点触,望交友。
作者: REN0011    时间: 2015-8-27 12:15
有没有办法支持mac...
作者: T.~以后    时间: 2015-8-27 12:45
不能跨平台是个问题...
作者: gamerteam    时间: 2015-8-27 13:07
T.~以后 发表于 2015-8-27 12:45
不能跨平台是个问题...

跨平台的话,可以mono在Linux上运行,但是不支持WPF也是头疼,WinForm用得要吐了
作者: gamerteam    时间: 2015-8-27 13:07
REN0011 发表于 2015-8-27 12:15
有没有办法支持mac...

MAC的话暂时没办法,主要是考虑到国内大部分玩家都是Windows系统的。
作者: T.~以后    时间: 2015-8-27 13:07
gamerteam 发表于 2015-8-27 13:07
跨平台的话,可以mono在Linux上运行,但是不支持WPF也是头疼,WinForm用得要吐了 ...

那还不如用java写的起动器..
作者: gamerteam    时间: 2015-8-27 13:09
T.~以后 发表于 2015-8-27 13:07
那还不如用java写的起动器..

C#自然有他的优势嘛,WPF写出来的程序又漂亮又简单,而且还可以抱微软爸爸的大腿
作者: gamerteam    时间: 2015-8-27 13:10
poi4399 发表于 2015-8-27 10:54
╭(°A°`)╮有点触,望交友。

{:10_527:}我感觉你比我触怎么办
作者: T.~以后    时间: 2015-8-27 13:59
gamerteam 发表于 2015-8-27 13:09
C#自然有他的优势嘛,WPF写出来的程序又漂亮又简单,而且还可以抱微软爸爸的大腿 ...

可是我不喜欢微软...windows什么的真的用不习惯
作者: 1343007125    时间: 2015-8-27 16:11
T.~以后 发表于 2015-8-27 13:59
可是我不喜欢微软...windows什么的真的用不习惯

我也是诶,我是Mac
作者: T.~以后    时间: 2015-8-27 17:45
1343007125 发表于 2015-8-27 16:11
我也是诶,我是Mac

GUN/Linux:ElementaryOS&ArchLinux
作者: gundamMC    时间: 2015-8-27 18:16
本帖最后由 gundamMC 于 2015-8-27 19:53 编辑

膜拜大触QwQ, 交个朋友好不好233 (*/ω\*)
唔。。。试了一下肿么会这样QAQ



那个dll是直接用KMCCCPro编译的。。。_(:зゝ∠)_

作者: breathiness    时间: 2015-8-27 22:27
本帖最后由 breathiness 于 2015-8-27 22:34 编辑

C#啊.....只能路过了......顺,听说作者是个十二岁的小萝莉(流口水)
作者: gamerteam    时间: 2015-8-27 23:20
gundamMC 发表于 2015-8-27 18:16
膜拜大触QwQ, 交个朋友好不好233 (*/ω\*)
唔。。。试了一下肿么会这样QAQ

你添加引用没

而且VS自带提示,你鼠标放在错误的地方,有时候又的问题是可以自动帮你解决的

我在后面窗口的位置那儿没写要加一个KMCCC.Launch的引用,就是因为可以使用VS自动修复这个问题的
作者: Darkyoooooo    时间: 2015-8-27 23:55
T.~以后 发表于 2015-8-27 17:45
GUN/Linux:ElementaryOS&ArchLinux

欢迎使用Java版KMCCC——JMCCC: https://github.com/Darkyoooooo/JMCCC
作者: 0x3B800001    时间: 2015-8-28 01:08
Darkyoooooo 发表于 2015-8-27 23:55
欢迎使用Java版KMCCC——JMCCC: https://github.com/Darkyoooooo/JMCCC

darkyoooooo快写教程(不然没人会用的= =,等JMCCC的教程已经好长时间了)!!!!!!!!
作者: 王健彬    时间: 2015-8-28 07:10
口袋妖怪的MC服务器在哪下
作者: T.~以后    时间: 2015-8-28 08:27
Darkyoooooo 发表于 2015-8-27 23:55
欢迎使用Java版KMCCC——JMCCC: https://github.com/Darkyoooooo/JMCCC

可是我并不喜欢java...
作者: nikoniko_ni    时间: 2015-8-28 08:46
感谢!帮助很大{:10_492:}
作者: brave_heart    时间: 2015-8-28 11:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: gundamMC    时间: 2015-8-28 18:27
gamerteam 发表于 2015-8-27 23:20
你添加引用没

而且VS自带提示,你鼠标放在错误的地方,有时候又的问题是可以自动帮你解决的

加了引用。。。
作者: gamerteam    时间: 2015-8-28 19:34
本帖最后由 gamerteam 于 2015-8-28 19:43 编辑
gundamMC 发表于 2015-8-28 18:27
加了引用。。。

窗口部分的代码也需要添加using引用

using KMCCC.Launcher;



作者: gundamMC    时间: 2015-8-28 20:18
对啊,窗口的那个也加了。你看一下那个报错,应该不是引用的问题。。?
作者: gamerteam    时间: 2015-8-28 20:58
gundamMC 发表于 2015-8-28 20:18
对啊,窗口的那个也加了。你看一下那个报错,应该不是引用的问题。。?

你是WinForm还是WPF
然后我后面的

其中有一段是

然后打开Program.cs(如果是WPF则是App.xmal.cs)添加KMCCC的引用:
  1. using KMCCC.Launcher;
复制代码


然后在入口处添加以下代码
  1. public static LauncherCore Core = LauncherCore.Create();
复制代码

如图所示


然后启动参数再进行Program.Core.Launch的引用,这里的Program.Core就是上面的那个,Program类里引用的LauncherCore

作者: gundamMC    时间: 2015-8-28 21:18
gamerteam 发表于 2015-8-28 20:58
你是WinForm还是WPF
然后我后面的

。。。VS2015 _(:зゝ∠)_

后面那段有的。。。

作者: zhouyiran2    时间: 2015-8-29 03:18
gundamMC 发表于 2015-8-28 21:18
。。。VS2015 _(:зゝ∠)_

后面那段有的。。。

请确认核心版本>=0.9.5.2(如果我没记错)
.net >= 4.0
作者: gundamMC    时间: 2015-8-29 08:40
zhouyiran2 发表于 2015-8-29 03:18
请确认核心版本>=0.9.5.2(如果我没记错)
.net >= 4.0

核心是那个KMCCC? 那个直接从github上面下的。。。

.net是 4.5.2
作者: wu123y    时间: 2015-8-29 09:50
呵呵,顶

作者: 九尾·    时间: 2015-8-29 12:34
gamerteam 发表于 2015-8-24 23:13
C#做启动器本来就很容易,其实不管什么语言,只要你会了基础,然后随便网上搜一个json解析工具,自己就可 ...

{:10_492:}这个是什么软件QAQ
作者: gamerteam    时间: 2015-8-29 12:55
九尾· 发表于 2015-8-29 12:34
这个是什么软件QAQ

并不是什么软件,所以我说本文仅适合拥有一定C#基础的人
作者: 九尾·    时间: 2015-8-29 14:08
gamerteam 发表于 2015-8-29 12:55
并不是什么软件,所以我说本文仅适合拥有一定C#基础的人

那能告诉我WindowsForm在哪里下载或者在哪里么=-=
作者: gamerteam    时间: 2015-8-29 14:55
九尾· 发表于 2015-8-29 14:08
那能告诉我WindowsForm在哪里下载或者在哪里么=-=

就目前的情况看,你没有一点编程基础,本教程不太适合,建议你拥有本语言的基础了来,再来研究本文章
作者: 十雨    时间: 2015-8-29 14:57
九尾· 发表于 2015-8-29 14:08
那能告诉我WindowsForm在哪里下载或者在哪里么=-=

vs2008里面有
作者: 九尾·    时间: 2015-8-29 14:59
gamerteam 发表于 2015-8-29 14:55
就目前的情况看,你没有一点编程基础,本教程不太适合,建议你拥有本语言的基础了来,再来研究本文章 ...

{:10_524:}我连这个软件哪里下载都不知道怎么学QAQ
作者: 九尾·    时间: 2015-8-29 15:01
十雨 发表于 2015-8-29 14:57
vs2008里面有

{:10_495:}好吧我知道了谢谢了
作者: tdiant    时间: 2015-8-29 15:49
九尾· 发表于 2015-8-29 14:59
我连这个软件哪里下载都不知道怎么学QAQ

同51L,我同样认为你没有一点,一点,任何一点编程基础,学习本教程有些不妥当。
WinForm不是软件,这是常识。WinForm是.NET里的一个。。。部分罢了,后面还有WPF。
就好比你总不能说,语文在哪里下载,数学在哪里下载,英语在哪里下载,对吧,一看就知道你不懂
作者: gamerteam    时间: 2015-8-29 17:53
十雨 发表于 2015-8-29 14:57
vs2008里面有

但是VS2008并没有.net 4
作者: gundamMC    时间: 2015-8-29 18:20
本帖最后由 gundamMC 于 2015-8-29 19:15 编辑

话说导出KMCCC的时候是只导出KMCCC.Pro还是全部一起导出啊。。。导出的时候Basic 和 Pro都没问题,就是那个Shared。。。几乎8000多个报错,那个System.Void未定义或导入。 哦对最开始的时候那个Shared打不开,我改了那个import才打开的
<Import Project="$(MSBuildBinPath)/Microsoft.CSharp.targets" />

就是这个,把原来的那个Csharp.targets换掉了

好吧终于琢磨出来了233 总之谢谢啦QwQ

。。。那个java的会报错。。。

“System.InvalidOperationException”类型的未经处理的异常在 System.Core.dll 中发生

其他信息: 序列不包含任何元素




作者: gamerteam    时间: 2015-8-29 19:15
gundamMC 发表于 2015-8-29 18:20
话说导出KMCCC的时候是只导出KMCCC.Pro还是全部一起导出啊。。。导出的时候Basic 和 Pro都没问题,就是那个 ...

你电脑没有Java吗?那个地方前面加try{,然后后面加}catch{}
作者: gundamMC    时间: 2015-8-29 19:18
gamerteam 发表于 2015-8-29 19:15
你电脑没有Java吗?那个地方前面加try{,然后后面加}catch{}

我把那个First换成了SingleOrDefault然后就好了,可是读取不到java啊。。。我电脑上面2个还是3个java应该不会是java的问题吧,都是从官网下的
作者: zhouyiran2    时间: 2015-8-29 19:30
gundamMC 发表于 2015-8-29 08:40
核心是那个KMCCC? 那个直接从github上面下的。。。

.net是 4.5.2

是不是没法打开KMCCC.Shared、、那个项目用了点非正常科技、如果没装WindowsSDK可能打不开
楼主12岁小萝莉逗逼,没有写CI地址,直接去这里下编译完的就行了
https://ci.appveyor.com/project/zhouyiran2/kmccc
作者: zhouyiran2    时间: 2015-8-29 19:32
gundamMC 发表于 2015-8-29 19:18
我把那个First换成了SingleOrDefault然后就好了,可是读取不到java啊。。。我电脑上面2个还是3个java应该 ...

如果你是64位系统、只装了64位java,请确认编译模式不是x86,应是AnyCPU
如果不是,请在github提交issue,如果有条件的话能把内部catch到的的错误详情贴出好
作者: gamerteam    时间: 2015-8-29 19:32
zhouyiran2 发表于 2015-8-29 19:30
是不是没法打开KMCCC.Shared、、那个项目用了点非正常科技、如果没装WindowsSDK可能打不开
楼主12岁小萝 ...

{:10_527:}欧尼酱别这样嘛
作者: 九尾·    时间: 2015-8-29 21:28
tdiant 发表于 2015-8-29 15:49
同51L,我同样认为你没有一点,一点,任何一点编程基础,学习本教程有些不妥当。
WinForm不是软件,这是 ...

{:10_492:}我就学过一些VB++什么的=-=
作者: gundamMC    时间: 2015-8-29 21:30
zhouyiran2 发表于 2015-8-29 19:32
如果你是64位系统、只装了64位java,请确认编译模式不是x86,应是AnyCPU
如果不是,请在github提交issue ...

我电脑是64,java也是64 编译模式那里是AnyCPU,但是我换成x64 或者把那个 首选32位关掉 软件就打不开了

程序“[8344] Origin.vshost.exe”已退出,返回值为 -1073741819 (0xc0000005) 'Access violation'。


这个前面的都是加载正常,你刚才发的那个已经编译好的我也换了。
作者: zhouyiran2    时间: 2015-8-29 22:43
gundamMC 发表于 2015-8-29 21:30
我电脑是64,java也是64 编译模式那里是AnyCPU,但是我换成x64 或者把那个 首选32位关掉 软件就打不开了
...

https://github.com/MineStudio/MCMV3
(这是官方Demo,不会弄git的话就把项目里面KMCCC的子项目删掉改成引用dll)
再出错我也没办法,好好的东西都能炸成这样我也是醉了

作者: gundamMC    时间: 2015-8-29 22:58
本帖最后由 gundamMC 于 2015-8-29 23:23 编辑
zhouyiran2 发表于 2015-8-29 22:43
https://github.com/MineStudio/MCMV3
(这是官方Demo,不会弄git的话就把项目里面KMCCC的子项目删掉改成 ...

报错。。。
Fody: An unhandled exception occurred:
Exception:
Unknown custom metadata item kind: 7
StackTrace:
   在 Microsoft.Cci.Pdb.PdbFunction.ReadCustomMetadata(BitAccess bits)
   在 Microsoft.Cci.Pdb.PdbFunction..ctor(ManProcSym proc, BitAccess bits)
   在 Microsoft.Cci.Pdb.PdbFunction.LoadManagedFunctions(BitAccess bits, UInt32 limit, Boolean readStrings)
   在 Microsoft.Cci.Pdb.PdbFile.LoadFuncsFromDbiModule(BitAccess bits, DbiModuleInfo info, IntHashTable names, ArrayList funcList, Boolean readStrings, MsfDirectory dir, Dictionary`2 nameIndex, PdbReader reader)
   在 Microsoft.Cci.Pdb.PdbFile.LoadFunctions(Stream read, Dictionary`2& tokenToSourceMapping, String& sourceServerData, Int32& age, Guid& guid)
   在 Mono.Cecil.Pdb.PdbReader.PopulateFunctions()
   在 Mono.Cecil.Pdb.PdbReader.ProcessDebugHeader(ImageDebugDirectory directory, Byte[] header)
   在 Mono.Cecil.ModuleDefinition.ProcessDebugHeader()
   在 Mono.Cecil.ModuleDefinition.ReadSymbols(ISymbolReader reader)
   在 Mono.Cecil.ModuleReader.ReadSymbols(ModuleDefinition module, ReaderParameters parameters)
   在 Mono.Cecil.ModuleReader.CreateModuleFrom(Image image, ReaderParameters parameters)
   在 Mono.Cecil.ModuleDefinition.ReadModule(Stream stream, ReaderParameters parameters)
   在 Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters)
   在 InnerWeaver.ReadModule() 位置 c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\ModuleReader.cs:行号 14
   在 InnerWeaver.Execute() 位置 c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:行号 28
Source:
Mono.Cecil.Pdb
TargetSite:
Void ReadCustomMetadata(Microsoft.Cci.Pdb.BitAccess)        MCMV3               
我试了原来的手动输入Java,还是会提示版本核心不对,没有java什么的
作者: zhouyiran2    时间: 2015-8-29 23:56
gundamMC 发表于 2015-8-29 22:58
报错。。。
我试了原来的手动输入Java,还是会提示版本核心不对,没有java什么的 ...

您是盗版(VisualStudio .Net Windows 计算机)的受害者【误】

// 我醉了,你看着办吧,用楼主的那个底子,报错了就百度+百度,我要补作业,没空解决个别问题
作者: gamerteam    时间: 2015-8-30 10:34
gundamMC 发表于 2015-8-29 22:58
报错。。。
我试了原来的手动输入Java,还是会提示版本核心不对,没有java什么的 ...

个人感觉是你的系统原因,别告诉我你用的Ghost版的系统。
个人推荐的开发环境是Win8或以上,安装VS2013或以上版本
VS你可以去“MSDN我告诉你”下载完整的映像
作者: tdiant    时间: 2015-8-30 10:45
九尾· 发表于 2015-8-29 21:28
我就学过一些VB++什么的=-=

有时候.NET的一切东西比如VB.NET、C#、F#什么的都可以看做是一种东西,因为他们都是基于.Net,只不过说话的方式变了。
就比如说,你想表达你今天上午吃了个馒头,你可以说我今天上我吃了个馒头,我还可以说我吃了个馒头在上午,或者上午我吃了个馒头。语法不一样但是意思绝对是一样的,最终的目的是一样的,反正他怎么说,他就是吃了个馒头,上午吃的,就这个意思。
=。= VB++是啥鬼我也不知道,是Visual Basic 6.0或者更老的?VB6的那个开发框架他就是WinForm。然后微软后续搞了个.Net,把VB6这类的老语言移植到上面了,还神奇的发明了C#什么的。WinForm一般C#里用的比较多。WinForm说白了就是VB6里面那个拖控件的开发模式。但是后续微软搞出了WinForm的Plus也就是WPF,WPF首先他还是拖控件,BUT,这些控件的数据能在xmal里更好的去管理,说简单点就是让WinForm里一些神奇的东西变简单了。比如我要是想在程序里加特技加洗发水,让程序DUANG起来,WPF里做比WinForm容易得多。

说了这么多,WinForm就是老式的拖控件就像你说的VB++那样,但是,VB++里没这个名词是因为VB++里只有一种姿势拖控件,.Net里你还可以用更新颖的姿势拖控件,所以给原来的拖控件规则起个名字叫WinForm。
作者: 九尾·    时间: 2015-8-30 12:36
tdiant 发表于 2015-8-30 10:45
有时候.NET的一切东西比如VB.NET、C#、F#什么的都可以看做是一种东西,因为他们都是基于.Net,只不过说话 ...

{:10_496:}你是星空物语腐竹?!
作者: zhouyiran2    时间: 2015-8-30 17:09
tdiant 发表于 2015-8-30 10:45
有时候.NET的一切东西比如VB.NET、C#、F#什么的都可以看做是一种东西,因为他们都是基于.Net,只不过说话 ...

{:10_503:} 不能把WPF理解为WinForm plus、、、这根本差得多多了、、
作者: tdiant    时间: 2015-8-30 17:25
zhouyiran2 发表于 2015-8-30 17:09
不能把WPF理解为WinForm plus、、、这根本差得多多了、、

我说他是WinForm Plus的意思是想让他知道WPF的初衷是从WinForm演变过来的。
=A= 其实两个并不一样。但对于不了解WPF的人来说或者VB6粉来说。。。。。。了解这俩的区别和不了解没啥区别
作者: gundamMC    时间: 2015-8-30 18:38
gamerteam 发表于 2015-8-30 10:34
个人感觉是你的系统原因,别告诉我你用的Ghost版的系统。
个人推荐的开发环境是Win8或以上,安装VS2013或 ...

VS2015, Win10 都是官方下的。。。
作者: gamerteam    时间: 2015-8-30 21:09
gundamMC 发表于 2015-8-30 18:38
VS2015, Win10 都是官方下的。。。

我全是MSDN下载的,你出现的这个问题确实就有点奇葩了,很少见。
你MCMV3能否编译?
作者: gundamMC    时间: 2015-8-30 21:24
gamerteam 发表于 2015-8-30 21:09
我全是MSDN下载的,你出现的这个问题确实就有点奇葩了,很少见。
你MCMV3能否编译? ...

不行,报错在上面
作者: gamerteam    时间: 2015-8-31 19:47
gundamMC 发表于 2015-8-30 21:24
不行,报错在上面

我个人也是尝试了很多次,没重现这个BUG
你试试使用WPF?
作者: 15253540    时间: 2015-9-1 09:52
看起来不错(可惜我不用C#)
作者: 绿茵大陆    时间: 2015-9-1 20:48
定做启动器、方便加我Q么 985517777
作者: gamerteam    时间: 2015-9-1 22:05
绿茵大陆 发表于 2015-9-1 20:48
定做启动器、方便加我Q么 985517777

价格较高,请自行考虑
作者: 绿茵大陆    时间: 2015-9-2 14:48
gamerteam 发表于 2015-9-1 22:05
价格较高,请自行考虑

没事的、麻烦您加下吧
作者: sdds15465    时间: 2015-9-2 18:46
一定C#基础.......
我曾经是制作GTA:SA CLEOmods的一个制作人,算有基础吗?(也算是C#语言)
作者: 马上登陆    时间: 2015-9-2 22:47
厉害!新手路过...........
作者: gamerteam    时间: 2015-9-3 00:16
sdds15465 发表于 2015-9-2 18:46
一定C#基础.......
我曾经是制作GTA:SA CLEOmods的一个制作人,算有基础吗?(也算是C#语言) ...

那我就不知道你的了,不过一般没问题,除了对编程一点都不懂的人,一般还是看得懂
作者: brave_heart    时间: 2015-9-3 14:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: Dai_Yu    时间: 2015-9-3 15:22
易语言狗路过。。。{:10_523:}
作者: linzhibin    时间: 2015-9-4 09:44
{:10_492:}对于我这种没有C#基础的人可就悲惨了
作者: hansara    时间: 2015-9-14 17:26
本帖最后由 hansara 于 2015-9-14 21:56 编辑

大大,请问一下,为什么打不开MOD?
作者: gamerteam    时间: 2015-9-14 22:10
hansara 发表于 2015-9-14 17:26
大大,请问一下,为什么打不开MOD?

打不开mod是什么意思
作者: hansara    时间: 2015-9-15 08:14
gamerteam 发表于 2015-9-14 22:10
打不开mod是什么意思

打不开MOD客户端
作者: gamerteam    时间: 2015-9-15 18:30
hansara 发表于 2015-9-15 08:14
打不开MOD客户端

你是指使用本核心?估计缺少lib文件,或者json有问题。
作者: hansara    时间: 2015-9-15 21:39
gamerteam 发表于 2015-9-15 18:30
你是指使用本核心?估计缺少lib文件,或者json有问题。

我试过了,没有缺少,可以打开正常的端,但是打不开MOD端
作者: gamerteam    时间: 2015-9-15 21:55
hansara 发表于 2015-9-15 21:39
我试过了,没有缺少,可以打开正常的端,但是打不开MOD端

你确定你的客户端符合标准?请不要使用旋律那个完全不遵循启动标准的启动器
作者: 816830738    时间: 2015-9-15 23:20
能不能把教程写详细点{:10_492:}
作者: gamerteam    时间: 2015-9-16 00:05
816830738 发表于 2015-9-15 23:20
能不能把教程写详细点

哪个地方没写详细
作者: telunsu    时间: 2015-9-17 17:14
很强大{:10_524:}
作者: tallmoon    时间: 2015-9-19 15:08
楼主快一个月了,求更新高级教程
作者: 西行寺占星    时间: 2015-9-23 06:41
gundamMC 发表于 2015-8-30 21:24
不行,报错在上面

遇到了这个错误orz。。。研究了一下是Costura.Fody的锅。。更换新的版本就可以了。。。
作者: DEML_Meng    时间: 2015-9-30 20:20
卤煮真的十二岁?请收下我的膝盖!
作者: 白狼oy    时间: 2015-10-3 19:57
怎么没写了?
作者: xingyu    时间: 2015-11-1 20:08
楼主好,我想请问一下,东西写好了,路径也显示了,点击启动的时候运行了一下就没有了,我的系统是64位的
而且我的代码
  1.             var versions = Core.GetVersions().ToArray();
复制代码

不能加   Program