我已经编写了一个小exe,LibGit2Sharp并且正在尝试使用Costura.Fody它嵌入所有内容,因此我只有一个exe可以分发(实际上,也有两个配置文件,但这没关系)。
问题似乎是对,LibGet2Sharp.dll有相当牢固的引用git2-1196807.dll,我似乎无法弄清楚如何以前者可以使用的方式嵌入后者。我已经尝试了几件事,但是我认为我最好的尝试是:
所有这些.dll packages文件都从解决方案的文件夹中复制并设置为Build Action = Embedded Resource和Copy to Output Directory = Do Not Copy。
LibGit2Sharp参考设置为Copy Local = false,我已经尝试了FodyWeavers.xml中的简单路由:
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<Costura>
</Costura>
</Weavers>
Run Code Online (Sandbox Code Playgroud)
更复杂的是:
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<Costura>
<Unmanaged64Assemblies>
Costura64\LibGit2Sharp
Costura64\git2-1196807
</Unmanaged64Assemblies>
<Unmanaged32Assemblies>
Costura32\LibGit2Sharp
Costura32\git2-1196807
</Unmanaged32Assemblies>
</Costura>
</Weavers>
Run Code Online (Sandbox Code Playgroud)
但是,我总是得到一个错误,不是在打开exe时,而是在我单击首先使用git库的按钮时:
...'LibGit2Sharp.Core.NativeMethods'引发了异常。---> System.DllNotFoundException:无法加载DLL'git2-1196807':找不到指定的模块。(来自HRESULT的异常:0x8007007E)...
我所做的一些事情使我看到LibGet2Sharpdll无法访问的错误(不是有关的错误git2-1196807),但是我认为这只是在削弱Fody的时候。
您可以提供任何建议,我将不胜感激。这让我感到困惑。如果将git2-1196807.dll文件放在部署的位置“。\ lib \ win32 \ x86”和等效的64位文件中,则该文件可以正常运行,但是无法使用costura.fody。
有什么想法吗?
我有一个主要为其调用者提供2d数组的类(解析文件后).它返回这个数组很好,但我需要为该调用者提供一种方法将该2d数组转换为多分隔字符串.下面的伪代码.
完全披露:我的大部分时间都是在其他软件中编写脚本,所以我在OOP中有点生疏,特别是在c#中
我希望调用者能够:
string[,] results;
getArray (arg1, arg2, etc, out results);
Debug.WriteLine(results.ToString(delim1, delim2));
Run Code Online (Sandbox Code Playgroud)
但我不清楚如何为ToString()创建这个覆盖,如:
public override string[,] ToString(string rowSeparator, string columnSeparator)
{
string retVal = "";
for(int r = 0; r < this.getUpperBound(0); r ++)
{
for (int c = 0; c < this.getUpperBound(1); c++)
{
retVal += this[r,c];
if (c + 1 < this.getUpperBound(1))
{
retVal += columnSeparator;
}
}
if (r + 1 < this.getUpperBound(0))
{
retVal += rowSeparator;
}
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)