小编Kei*_*ith的帖子

引用另一个dll的dll的costura.fody

我已经编写了一个小exe,LibGit2Sharp并且正在尝试使用Costura.Fody它嵌入所有内容,因此我只有一个exe可以分发(实际上,也有两个配置文件,但这没关系)。

问题似乎是对,LibGet2Sharp.dll有相当牢固的引用git2-1196807.dll,我似乎无法弄清楚如何以前者可以使用的方式嵌入后者。我已经尝试了几件事,但是我认为我最好的尝试是:

所有这些.dll packages文件都从解决方案的文件夹中复制并设置为Build Action = Embedded ResourceCopy to Output Directory = Do Not Copy

添加.dll以明确地进行项目

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。

有什么想法吗?

.net c# dll libgit2sharp fody-costura

6
推荐指数
1
解决办法
1666
查看次数

c#.net覆盖多维数组的ToString

我有一个主要为其调用者提供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)

c# multidimensional-array visual-studio-2015

2
推荐指数
1
解决办法
498
查看次数