我使用VisualD和DMD在Visual Studio 2012中编写D。
我的解决方案在解决方案资源管理器中如下所示:
ConsoleApp1 (solution name)
- codecramlib (a static D library)
- - http (folder)
- - - package.d
- - - request.d
- malakai (console project)
- - main.d
我的静态D库codecramlib
正在自行构建。这是来源:
package.d
module codecramlib.http;
public import request;
request.d
module request;
// temporary filler code
class Request
{
public int imARequest()
{
return 13;
}
}
当我右键单击codecramlib
并构建时,我在vs console中获得此输出:
------ Build started: Project: codecramlib, Configuration: Debug Win32 ------
Building Debug\codecramlib.lib...
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
main.d:
import std.stdio;
import codecramlib.http; // also tried import codecramlib;
int main(string[] argv)
{
writeln("Hello D-World!");
return 0;
}
我通过右键单击codecramlib
项目并选择属性>添加了malakai
作为malakai依赖项。配置属性>编译器>一般并修改“附加导入”字段以读取“../codecramlib”。然后我点击“应用”和“确定”。
当我右键单击解决方案资源管理器中的malakai
并单击Build时,出现此错误:
Error 1 Error: module http is in file 'codecramlib\http.d' which cannot be read C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\malakai\main.d 2
我尝试的第一件事就是将“其他进口”行更改为:
../
这似乎有帮助,因为构建错误更改为: 错误1错误:模块请求在文件'request.d'中,无法读取C:\ Users \&lt;路径已删除&gt; \ Visual Studio 2012 \ Projects \ ConsoleApp1 \ codecramlib \ http \ package.d 3
为了让编译器识别codecramlib
静态库中的request.d,我将package.d更改为:
module codecramlib.http;
public import http.request;
这似乎是一个倒退,因为然后codecramlib库不再构建,当我尝试构建malakai时,我遇到了这些错误:
Error 1 Error: module request from file http\request.d must be imported as module 'request' C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d 3
Error 2 Error: module request is in file 'http\request.d' which cannot be read C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d 3
如何使用Visual D在我的malakai控制台项目中的codecramlib静态库中使用codecramlib.http包?
更正了解决方案资源管理器中显示的文件夹结构。我对package.d和request.d的缩进不正确。
添加了main.d的内容
答案 0 :(得分:1)
这部分
我尝试的第一件事是更改“其他进口”行 到:
../
这似乎有帮助,因为构建错误更改为:错误1错误: 模块请求在文件'request.d'中,无法读取C:\ Users \&lt; 已删除路径&gt; \ Visual Studio 2012 \ Projects \ ConsoleApp1 \ codecramlib \ http \ package.d 3
让我相信这是因为你的请求模块不在codecramlib.http包中,并且因为dmd不知道在/ codecramlib / http /中查找request.d。
我的建议是将“Additional Imports”字段保留为“../”,并将codecramlib / http / request.d中的模块重命名为codecramlib.http.request
,然后在codecramlib / http /中更改导入package.d到public import codecramlib.http.request
。
一般来说,您需要将模块名称与目录布局匹配。
答案 1 :(得分:0)
简单的答案是你不能导入整个包(D称为包中的文件夹),所以在你的main.d中应该导入codecramlib.http.request。
包也不是库,你不能链接它,但只导入模块,只是从模块添加声明到本地范围
试图让编译器识别中的request.d codecramlib静态库,我将package.d更改为:
module codecramlib.http;
公共导入http.request;
通过这样做你已经将模块http添加到包codecramlib.http,你是正确的,使用公共导入可以导入任何与模块相关的东西,在代码中有一个import语句,所以在main.d中你现在可以导入了codecramlib.http.htpp其中第一个http是包,第二个是模块,但我不建议给模块提供与包相同的名称,以避免名称冲突。