这是我的想法:
我希望一个小的可执行文件有一个app.config文件,其中有多个部分位于sectionGroup"applicationSettings"下(不是"appSettings",我不需要写入该文件).每个部分都有一个名称,对应于一个应该加载的模块.
这是一个例子:
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Executable" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="FirstModule" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Executable>
<setting name="MyFirstSetting" serializeAs="String">
<value>My awesome feature setting</value>
</setting>
</Executable>
<FirstModule path="path to the modules assembly">
<setting name="ImportantSettingToTheModule" serializeAs="String">
<value>Some important string</value>
</setting>
</FirstModule>
</applicationSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
现在,如果我定义FirstModule部分,我希望我的应用程序加载其程序集.如果未定义该部分,则不应加载该模块.这不仅适用于一个模块,也适用于尚未定义的模块.
所以我基本上需要在运行时找出已定义的部分.我该怎么办?
此外,我希望它成为一个可移植的可执行文件(=它也必须在Mono上运行),它向后兼容.NET 2.0.
看看GitHub上的项目(目前在此提交中)可能会很有趣.
我在Qt之上设置了一个项目(因此源代码是用C++编写的),我想尝试使用Gradle进行自动构建.我花了一些时间进入配置多项目构建的细节(有一个可执行文件以及两个库),现在我想告诉cpp-exe和cpp-lib插件我的源代码树是如何构成的.
我已经设置了一个应该打印所有源集的任务(至少应该有默认值?),它看起来像这样:
task projectinfo {
description = "Informations about the current project"
group = INFORMATIONS_GROUP
doFirst {
task -> print ("""${task.project.sourceSets.all}""")
}
Run Code Online (Sandbox Code Playgroud)
如果我运行此任务,Gradle会告诉我该项目没有属性"sourceSets".该插件的文档告诉我可以自定义源位置,但不能如何自定义源位置.
所以我的问题是:如何告诉Gradle cpp插件使用哪些源文件.如果有关于该cpp插件的任何文档,除了它的API文档和Gradle用户指南之外也会有所帮助.
当我遇到这个问题时,我正在努力创建一个稀疏的八叉树实现,就像nVidia ("Efficient Sparse Voxel Octrees")的人们为他们的体素做的那样:
我有一个字节类型的字节(只有8位)告诉我八叶树的叶子在哪里(1表示叶子,0表示没有叶子,8个节点附着 - > 8位).我现在要做的是返回叶子位置的数组.我当前的实现是使用while循环来确定是否设置了LSB.之后输入移1.所以这就是我这样做的方式:
int leafposition = _leafmask & _validmask;
int[] result = new int[8];
int arrayPosition = 0;
int iteration = 0;
while ( leafposition > 0 )
{
iteration++; //nodes are not zero-indexed ... ?
if ( (leafposition & 1) == 1 ) // LSB set?
{
result.SetValue( iteration, arrayPosition );
arrayPosition++;
};
leafposition = leafposition >> 1;
}
return result;
Run Code Online (Sandbox Code Playgroud)
这看起来并不优雅,有两件令人不安的事情:
我希望结果与[2,4,6]42 相似(0010 1010).
任何人都可以提供更优雅的解决方案仍然可读吗? …