如何根据当前项目构建调用另一个依赖项函数的依赖项?
How to build a dependency that calls a function of another dependency depending on the current project?
解释:
我有一个巨大的项目,它建立在一个坚实的框架之上,其中必须连接到数据库的函数根据一些条件以不同的方式工作(简单来说,我们可以说它是一个 true/false 布尔值)。简单来说,当它访问数据库时,它要么作为 Web 服务访问,要么作为直接 mysql 连接访问。
现在我开始创建一个Xamarin项目(android),我想导入这个框架,但是Xamarin不支持mysql...虽然框架可以调用到网络服务以获取 mysql 数据,mysql 代码存在的事实阻止了我的 xamarin 项目的构建。我什至不能使用“#if”,因为仍然有对 mysql dll 的引用。我将如何拆分我的 class dll 文件,以便此 android 项目不加载 mysql dll,只是调用 Web 服务的函数的一部分?
该函数的外观示例:
public static void InsertStuff(object stuff, bool useDirectMysql)
{
if (useDirectMysql)//I would like that this part only appears/works if its not the xamarin project, however, i can't use #if as the framework dll still has a reference to the mysql dll
{
//MySqlConnection connection = new MySqlConnection....
//insert stuff
}
else
{
//Insert stuff with a web service function.. (compatible with xamarin)
}
}
实现平台特定功能的模式如下:
在您的共享项目中创建一个具有 InsertStuff 方法的接口。
使用 DI 注入依赖项。
相应地在每个平台项目中实现接口。
Zdravko 提供了一个很好的解决方案
但是,我完成了我想要的,通过逐字地编译器注释框架中属性、函数、对象和引用 ("using ...") 的每一次使用或引用。所以虽然它在项目的引用部分引用了.dll文件,但Visual Studio似乎没有compile/emb那些没有使用的dll。
我的最终解决方案是:
1-创建 2 个构建配置,一个用于 xamarin 项目和框架,另一个用于我的普通 windows 程序和框架。
2-评论与 mobile xamarin 不兼容的所有内容(但仍保留对项目的引用)
3-创建了一个编译器变量,如 A。当我想编译我的 xamarin 项目时,我 select 只允许框架和 xamarin 的构建配置,将 A 放在我的框架 dll 中并编译。
4-在构建普通的 c#/c++/etc 程序时更改配置并远程 A。
一切都在同一个 VS 解决方案上。
解释: 我有一个巨大的项目,它建立在一个坚实的框架之上,其中必须连接到数据库的函数根据一些条件以不同的方式工作(简单来说,我们可以说它是一个 true/false 布尔值)。简单来说,当它访问数据库时,它要么作为 Web 服务访问,要么作为直接 mysql 连接访问。
现在我开始创建一个Xamarin项目(android),我想导入这个框架,但是Xamarin不支持mysql...虽然框架可以调用到网络服务以获取 mysql 数据,mysql 代码存在的事实阻止了我的 xamarin 项目的构建。我什至不能使用“#if”,因为仍然有对 mysql dll 的引用。我将如何拆分我的 class dll 文件,以便此 android 项目不加载 mysql dll,只是调用 Web 服务的函数的一部分? 该函数的外观示例:
public static void InsertStuff(object stuff, bool useDirectMysql)
{
if (useDirectMysql)//I would like that this part only appears/works if its not the xamarin project, however, i can't use #if as the framework dll still has a reference to the mysql dll
{
//MySqlConnection connection = new MySqlConnection....
//insert stuff
}
else
{
//Insert stuff with a web service function.. (compatible with xamarin)
}
}
实现平台特定功能的模式如下:
在您的共享项目中创建一个具有 InsertStuff 方法的接口。
使用 DI 注入依赖项。
相应地在每个平台项目中实现接口。
Zdravko 提供了一个很好的解决方案
但是,我完成了我想要的,通过逐字地编译器注释框架中属性、函数、对象和引用 ("using ...") 的每一次使用或引用。所以虽然它在项目的引用部分引用了.dll文件,但Visual Studio似乎没有compile/emb那些没有使用的dll。
我的最终解决方案是:
1-创建 2 个构建配置,一个用于 xamarin 项目和框架,另一个用于我的普通 windows 程序和框架。
2-评论与 mobile xamarin 不兼容的所有内容(但仍保留对项目的引用)
3-创建了一个编译器变量,如 A。当我想编译我的 xamarin 项目时,我 select 只允许框架和 xamarin 的构建配置,将 A 放在我的框架 dll 中并编译。
4-在构建普通的 c#/c++/etc 程序时更改配置并远程 A。
一切都在同一个 VS 解决方案上。