我的 C# .Net Framework 4.8 应用程序上突然出现以下警告。我已删除所有 bin 和 obj 文件夹,并尝试从包中删除并安装 DotNetCompilerPlat,但该消息不断出现。有任何想法吗?
\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets(13,9): message : MSB4120: Item 'RoslynCompilerFiles' definition within target references itself via (qualified or unqualified) metadatum 'RecursiveDir'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref
\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets(13,9): message : MSB4120: Item 'RoslynCompilerFiles' definition within target references itself via (qualified or unqualified) metadatum 'Filename'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref
\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets(13,9): message : MSB4120: Item 'RoslynCompilerFiles' definition …Run Code Online (Sandbox Code Playgroud) 有没有人知道模板类中的声明外模板方法的语法.
例如:
template<class TYPE>
class thing
{
public :
void do_very_little();
template<class INNER_TYPE>
INNER_TYPE do_stuff();
};
Run Code Online (Sandbox Code Playgroud)
第一种方法是定义的:
template<class TYPE>
void thing<TYPE>::do_very_little()
{
}
Run Code Online (Sandbox Code Playgroud)
我怎么做第二个,"do_stuff"?
我们最近在使用自定义删除器从unique_ptr移动到shared_ptr时遇到了崩溃.当用于创建智能指针的指针为空时发生崩溃.下面是重现问题的代码,并显示了两个有效的案例.
在下面的源代码中,One和Two快乐地运行,而Three在"ReleaseDestroy"中崩溃.当智能指针中使用的类具有虚拟"释放"时,崩溃似乎正在发生,因此程序正在尝试查找V表.unique_ptr看起来像检查空指针并且不运行析构函数.共享指针似乎忽略了这一点.
有谁知道这是设计,还是stl实现中的错误?我们正在使用Visual Studio 2015.
#include <iostream>
#include <memory>
template<class R>
void ReleaseDestroy(R* r)
{
r->Release();
};
class FlatDestroy
{
public :
void Release()
{
delete this;
}
};
class VirtualDestroy
{
public:
virtual void Release()
{
delete this;
}
};
class SimpleOne
{
public :
};
void main()
{
std::shared_ptr<SimpleOne> One(nullptr);
std::shared_ptr<FlatDestroy> Two(nullptr, ReleaseDestroy<FlatDestroy>);
std::shared_ptr<VirtualDestroy> Three(nullptr, ReleaseDestroy<VirtualDestroy>);
One.reset();
Two.reset();
Three.reset();
}
Run Code Online (Sandbox Code Playgroud) 我继承了一个C#Web应用程序(和Web服务),它在Windows上编译并在Linux机器上的Mono上运行.我需要做一些文件权限魔术,看起来它涉及包括程序集:mono.unix.native.
那么,我可以在我的Windows框中引用它,如果是这样,它在哪里?
作为优化,或者为了避免包含循环,可以向前声明类型,这导致代码如下:
class A;
class B
{
A *a;
};
Run Code Online (Sandbox Code Playgroud)
如果前向声明的数量变大,则会占用头文件顶部的大量空间.有没有一种方法可以同时向前声明和使用?有点像:
class B
{
extern A *a;
};
Run Code Online (Sandbox Code Playgroud)
我以前从来没有真正想过这个,但是我有一个带有一堆前向声明的标题,我想让它更整洁(没有将它们转移到另一个包含文件).
编辑:我将'a'更改为指针,因为它正确指出您只能在指针和引用上使用前向声明.
我正在尝试使用TinyXML2创建XML文件.虽然有很多关于加载的示例和教程,但保存似乎很少.我基本上想要最终得到:
<node>text</node>
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过添加元素来获取"节点"部分,但是如何设置文本部分?Element有一个"GetText"但我找不到"SetText".还有一个XMLText类,但没有设置文本的方法!
我有一个mvc 3应用程序,后台线程检查一些数据库项的状态.当它找到过期的项目时,它会发送一封电子邮件.在电子邮件中,我想要包含要呼叫的操作的URL以查看状态.如果这是从控制器完成的,我会使用UrlHelper,例如:
string body_url = "For more details see: " + Url.Action("Details", "MyOrder", new { OrderId = order.OrderId }, Constants.HttpProtocol);
Run Code Online (Sandbox Code Playgroud)
但是,我不在控制器中,也不是从控制器调用我的方法,它是在应用程序启动时启动的.有没有办法生成有效的UrlHelper,或者,如果没有,生成有效的URL,而不依赖于硬编码路径,独立于控制器?
我确信这很容易做到,但我找不到怎么做!如何查看MySQL中的视图是什么?基本上,我如何看到原始CREATE VIEW中使用了哪些语句?
我有一个非空字段的表,我希望从另一个表填充.麻烦是查询到其他表可能会返回null.当查询返回null时,如何获取值(0将执行)?我的查询是:
update Packages
set PackageTypeId = (SELECT TOP 1 PackageTypeId
FROM PackageTypes
WHERE Packages.PackageTypeName = PackageTypes.Name
ORDER BY PackageTypeId ASC)
Run Code Online (Sandbox Code Playgroud)
我尝试使用coalesce,但它仍然失败:
update Packages
set PackageTypeId = (SELECT TOP 1 coalesce(PackageTypeId, 0) as id
FROM PackageTypes
WHERE Packages.PackageTypeName = PackageTypes.Name
ORDER BY PackageTypeId ASC)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
假设我有一个简单的类是一次性的:
class CanDispose : IDisposable
{
...
}
Run Code Online (Sandbox Code Playgroud)
现在我显然可以把它放在一个“使用”块中以使其处理:
using (var myDisposable = new CanDispose())
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是如果我有一个通过 out 参数返回一次性的工厂方法呢?在我的示例中,可以有多个返回,因此多个输出是干净的:
public bool CreateDisposable(out CanDispose canDispose)
{
canDispose = new CanDispose();
...
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我如何把它放在 using 语句中?简单地将函数调用放入 using 块似乎不起作用。我是否必须求助于返回一个元组(这行得通吗?),还是有更简单的方法?
请注意,这似乎不起作用。至少它不会在超出范围之前关闭有关处理的警告:
using (CreateDisposable(out CanDispose myDispose))
{
....
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 CreateProcess 启动一个进程,并且我想等待该进程完成,或者等待任何内容写入标准输出,该标准输出通过匿名管道进行传输。下面的代码不起作用,因为 WaitForMultipleObjects 不断返回标准输出管道,即使没有任何内容可读取。有没有办法等待管道?我迫不及待地想阅读,因为如果该过程完成,我还需要继续。我也不能等到该过程完成而不检查管道,因为它可能会溢出。有任何想法吗?
if (::CreateProcess(
(!application_name.empty() ? application_name.c_str() : NULL), // Application/Executable name, if supplied.
lpCommandLine, // Arguments or Executable and Arguments
NULL, // Process Attributes
NULL, // Thread Attributes
TRUE, // Inherit handles
CREATE_NO_WINDOW, // Create flags
NULL, // Environment (Inherit)
current_directory.c_str(), // Working Directory
&m_startup_info, // Startup Info
&process_info // Process Info
))
{
HANDLE handles[2];
bool waiting = true;
handles[0] = process_info.hProcess;
handles[1] = m_read_stdout; // previously created with CreatePipe. One end handed to CreateProcess …Run Code Online (Sandbox Code Playgroud)