我试图将应用程序与单声道3.2.3捆绑到一个独立的可执行文件.为此,我遵循本指南.声明变量后:
mono_version="3.2.3"
export MONO=/cygdrive/c/progra~2/Mono-$mono_version
machineconfig=$PROGRAMFILES\\Mono-$mono_version\\etc\\mono\\4.5\\machine.config
export PATH=$PATH:$MONO/bin
export PKG_CONFIG_PATH=$MONO/lib/pkgconfig
export CC="i686-pc-mingw32-gcc -U _WIN32"
Run Code Online (Sandbox Code Playgroud)
mkbundle --deps命令无法本地化引用的程序集:
Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 'gtk-sharp' or
one of its dependencies. The system cannot find the file specified.
File name: 'gtk-sharp'
Run Code Online (Sandbox Code Playgroud)
使用mono 2.10.9执行完全相同的操作:
mono_version="2.10.9"
export MONO=/cygdrive/c/progra~2/Mono-$mono_version
machineconfig=$PROGRAMFILES\\Mono-$mono_version\\etc\\mono\\4.0\\machine.config
export PATH=$PATH:$MONO/bin
export PKG_CONFIG_PATH=$MONO/lib/pkgconfig
export CC="i686-pc-mingw32-gcc -U _WIN32"
mkbundle --deps --machine-config "$machineconfig" -c UI.exe
Run Code Online (Sandbox Code Playgroud)
给出积极的结果:
OS is: Windows
WARNING:
Check that the machine.config file you are bundling
doesn't contain sensitive information specific …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Mono创建一个Mac捆绑包.当我执行:
mkbundle file.exe --deps -o FILE
Run Code Online (Sandbox Code Playgroud)
我在编译期间得到了这个:
fatal error: "mono/metadata/mono-config.h" file not found
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我写了一些控制台"Hello world"的应用程序.并且已经跟着c#cywgwin mono mkbundle windows 7 - 无法编译文件的答案.但我得到了:
$ mkbundle -o Fur Furries.exe --deps -z
OS is: Windows
Sources: 1 Auto-dependencies: True
embedding: C:\Monotest\Furries.exe
compression ratio: 40.43%
embedding: C:\Soft\Mono\lib\mono\4.0\mscorlib.dll
compression ratio: 34.68%
Compiling:
as -o temp.o temp.s
gcc -mno-cygwin -g -o Fur -Wall temp.c `pkg-config --cflags --libs mono-2|dos2un
ix` -lz temp.o
temp.c: In function `main':
temp.c:173: warning: implicit declaration of function `g_utf16_to_utf8'
temp.c:173: warning: assignment makes pointer from integer without a cast
temp.c:188: warning: assignment makes pointer from …
Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用mkbundle编译或捆绑我的应用程序.这是我正在执行的脚本:
set -o errexit
set -o nounset
mono_version="3.2.3"
export MONO=/cygdrive/c/progra~2/Mono-$mono_version
machineconfig=$PROGRAMFILES\\Mono-$mono_version\\etc\\mono\\4.0\\machine.config
export PATH=$PATH:$MONO/bin
export PKG_CONFIG_PATH=$MONO/lib/pkgconfig
icon_name='"icon.ico"'
echo "1 ICON $icon_name" > icon.rc
export CC="i686-pc-mingw32-gcc icon.o -U _WIN32"
output_name=Output.exe
mkbundle JiraTempoApp.exe MonoPosixHelper.dll gtk-sharp.dll glib-sharp.dll atk-sharp.dll gdk-sharp.dll glade-sharp.dll glib-sharp.dll pango-sharp.dll RestSharp.dll JiraRestLib.dll --deps --machine-config "$machineconfig" -o $output_name -z
rm icon.rc
rm icon.o
cp $MONO/bin/mono-2.0.dll .
cp $MONO/bin/zlib1.dll .
./$output_name
Run Code Online (Sandbox Code Playgroud)
我不得不添加MonoPosixHelper.dll,因为我找不到EntryPoint错误.现在我得到了这个奇怪的错误:
$ ./mkbundle_cygwin.sh
OS is: Windows
WARNING:
Check that the machine.config file you are bundling
doesn't contain sensitive information specific to this machine. …
Run Code Online (Sandbox Code Playgroud) 我想将我的c#应用程序分发到linux集群上的每台计算机,以便我可以运行它而无需在每台计算机上安装mono.
我花了好几个小时试图让mkbundle工作,但它没有正确捆绑(我无法在另一台没有安装单声道的机器上运行该应用程序).
做这个的最好方式是什么?
我正在使用mkbundle并尝试创建一个使用Isis2的小程序IdaTester的嵌入式版本.该系统反过来使用Mono中依赖MonoPosixHelper的功能
我的问题是mkbundle无法识别依赖项,我最终得到一个仍然需要动态链接〜/ bin/lib/libMonoPosixHelper.so的可执行文件,当我将此可执行文件移动到我不能运行的系统时会导致问题有Mono安装.实际上,捆绑包缺少应该静态链接的东西之一.
我的可执行文件确实有效,但前提是我确保只在具有"正确位置"动态库的机器上运行它.这违背了嵌入式可执行文件的目的......我希望能够将这个程序作为一种服务器交给他们,他们可以把它放在任何地方并作为二进制文件启动,显然如果他们需要安装库来实现这一点,服务器并不是完全独立的!
我看到如何强制mkbundle包含程序所依赖的任何dll文件,但是MonoPosixHelper不作为dll存在; 这是一个仅限Linux的库,仅作为共享库存在.有没有人知道一种"强制"捆绑静态嵌入它的方法?
如果这有帮助,我的小编译脚本如下:
mcs -debug+ IdaTester.cs Isis.cs -r:System.dll -r:Microsoft.CSharp.dll -r:Mono.Posix.dll
mkbundle --static -o IdaTester IdaTester.exe --deps
Run Code Online (Sandbox Code Playgroud)
然后我运行IdaTester; 这适用于可以找到libMonoPosixHelper库的平台,但是如果在尚未安装libMonoPosixHelper的平台上运行时尝试动态加载该库,则会在运行时失败...
我试图从控制台应用程序创建一个可执行文件.我已经安装了mono,cygwin(mingw-gcc,mingw-zlib1,mingw-zlib-devel,pkg-config),我已将以下行添加到我的.bashrc文件中
export PKG_CONFIG_PATH=/cygdrive/c/progra~1/Mono-3.2.3/lib/pkgconfig
export PATH=$PATH:/cygdrive/c/progra~1/Mono-3.2.3/bin
export CC="i686-pc-mingw32-gcc -U _WIN32"
Run Code Online (Sandbox Code Playgroud)
但每当我尝试使用mkbundle时,我收到以下消息
有没有办法让mkbundle在Windows上正常工作.?
(我使用的是Windows 7 x86,单声道3.2.3,我在官方网站上找到的cygwin,xamarin studio 4.2和net framwork 4)
我有一个用 Mono 构建的 .NET 应用程序,我已经使用mkbundle
. 这样最终用户就不需要自己安装 Mono 了。
该应用程序使用 ServiceStack,它在后台使用HttpListener
. 我需要通过启用 SSL 的 HTTP 端点公开 Web 服务。
通常,您会httpcfg -add -port 1234 -p12 MyCert.pfx -pwd "MyPass"
在配置期间运行类似的操作(所有这些实际上只是将证书复制到特定路径),并且HttpListener
会自动将证书绑定到端口。
所以HttpListener
在运行时从特定路径加载证书。
那条路径是硬编码的吗?或者有什么方法可以告诉它使用来自另一个位置的证书,因为最终用户不会安装 Mono?
这是我遇到的问题:我使用MonoDevelop编写了一个Gtk#程序,它运行得很好.但现在我希望能够在其他Linux机器上运行它,而无需安装MonoDevelop.
我的解决方案有两个项目:主要的Gtk#应用程序,以及它所依赖的C#库项目.因此,当我构建主项目时,它会生成MainProject.exe和MainProject.exe.mdb,以及bin/Release文件夹中的DependencyProject.dll.
我尝试运行以下命令将它全部打包成一个可执行文件(从bin/Release文件夹运行):
mkbundle MainProject.exe -o mainproject --deps *.dll
Run Code Online (Sandbox Code Playgroud)
但是,我从运行该命令得到此错误:
未处理的异常:
System.IO.FileNotFoundException:无法加载文件或程序集"gtk-sharp"或其依赖项之一.该系统找不到指定的文件.
文件名称:'gtk-sharp'
在System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0
at(wrapper remoting-invoke-with-check)System.AppDomain:Load(string,System.Security.Policy.Evidence,bool)
在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0
在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requesModule,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0
在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000]中:0
[错误]致命的未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'gtk-sharp'或其依赖项之一.该系统找不到指定的文件.
文件名称:'gtk-sharp'
在System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0
at(wrapper remoting-invoke-with-check)System.AppDomain:Load(string,System.Security.Policy.Evidence,bool)
在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0
在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requesModule,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0
在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000]中:0
我看到了其他一些类似问题的Stack Overflow问题,但没有一个提供任何实用的解决方案.如何mkbundle
有效地使用此命令?
mkbundle ×10
mono ×10
c# ×6
.net ×2
deployment ×1
gtk ×1
gtk# ×1
httplistener ×1
isis2 ×1
linux ×1
macos ×1
portability ×1
servicestack ×1
ssl ×1