在使用 .Net 库项目的某个时刻,我总是面临以下问题:我必须将诸如 dll 之类的资源复制到调用 .Net 库的程序中。
例如,我有一个库可以进行一些声音处理。我有一个引用库项目的消费者程序(称之为测试项目)。在库项目中,我使用调用 c++ dll 的 ac# 包装类。我还有一个带有某些字符串的 .config 文件。我面临以下问题:
当测试项目调用库时,我得到 DllNotFound 异常。C# 包装器找不到 c++ dll。因此,我将 c++ dll 复制到测试项目中的某些文件夹(root、bin、bin/debug),直到 DLLNotFound 异常被“修复”(显然,我不确定它需要存储在哪里)。我还需要将 .config 文件从库复制到测试项目,尽管我在 Visual Studio 中设置了属性“如果较新则复制”。
我在说包含我需要运行的 SQL 命令的文本文件时遇到了类似的问题。所以我的库项目中有一个名为“commands.sql”的文件,我通过以下方式调用它:
//example
public static class Configurator
{
private static string _basePath = String.Empty;
public static string BasePath
{
get
{
if (_basePath == String.Empty)
{
var basePath = Environment.CurrentDirectory;
var projectName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
basePath = basePath.Substring(0, basePath.LastIndexOf(projectName));
_basePath = basePath + projectName;
}
return _basePath;
}
}
}
private static string LoadSqlScript()
{
return System.IO.File.ReadAllText($"{Configurator.BasePath}\\scripts\\commands.sql");
}
但是当我从测试项目中调用它时,这不起作用。我仍然需要手动将脚本复制到调用程序。
处理这个问题的正确方法是什么?我一定是错过了什么,对吧?我希望不必发布构建脚本来“自动化”这个,对吧?