小编Sim*_*ker的帖子

Roslyn 警告编译 .Net Framework 应用程序

我的 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)

.net c# roslyn .net-4.8

18
推荐指数
1
解决办法
2611
查看次数

模板类中模板方法的声明模板定义

有没有人知道模板类中的声明外模板方法的语法.

例如:

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"?

c++ templates

13
推荐指数
2
解决办法
4222
查看次数

shared_ptr奇怪性与空值和自定义删除

我们最近在使用自定义删除器从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++ shared-ptr unique-ptr

10
推荐指数
1
解决办法
861
查看次数

mono.unix.native在哪里

我继承了一个C#Web应用程序(和Web服务),它在Windows上编译并在Linux机器上的Mono上运行.我需要做一些文件权限魔术,看起来它涉及包括程序集:mono.unix.native.

那么,我可以在我的Windows框中引用它,如果是这样,它在哪里?

c# linux windows mono

9
推荐指数
1
解决办法
7484
查看次数

前进声明并一步使用

作为优化,或者为了避免包含循环,可以向前声明类型,这导致代码如下:

class A;

class B
{
    A *a;
};
Run Code Online (Sandbox Code Playgroud)

如果前向声明的数量变大,则会占用头文件顶部的大量空间.有没有一种方法可以同时向前声明和使用?有点像:

class B
{
    extern A *a;
};
Run Code Online (Sandbox Code Playgroud)

我以前从来没有真正想过这个,但是我有一个带有一堆前向声明的标题,我想让它更整洁(没有将它们转移到另一个包含文件).

编辑:我将'a'更改为指针,因为它正确指出您只能在指针和引用上使用前向声明.

c++

6
推荐指数
1
解决办法
109
查看次数

在tinyxml2中添加文本

我正在尝试使用TinyXML2创建XML文件.虽然有很多关于加载的示例和教程,但保存似乎很少.我基本上想要最终得到:

<node>text</node>
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过添加元素来获取"节点"部分,但是如何设置文本部分?Element有一个"GetText"但我找不到"SetText".还有一个XMLText类,但没有设置文本的方法!

c++ xml tinyxml2

5
推荐指数
1
解决办法
4915
查看次数

在ASP.NET MVC 3中生成独立于控制器的URL

我有一个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,而不依赖于硬编码路径,独立于控制器?

c# urlhelper asp.net-mvc-3

5
推荐指数
1
解决办法
1499
查看次数

如何查看MySQL视图的内容?

我确信这很容易做到,但我找不到怎么做!如何查看MySQL中的视图是什么?基本上,我如何看到原始CREATE VIEW中使用了哪些语句?

mysql sql

3
推荐指数
1
解决办法
81
查看次数

如果select返回null,则使用默认值插入

我有一个非空字段的表,我希望从另一个表填充.麻烦是查询到其他表可能会返回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)

有任何想法吗?

sql sql-server

2
推荐指数
1
解决办法
115
查看次数

“使用”一个输出参数

假设我有一个简单的类是一次性的:

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)

c#

2
推荐指数
2
解决办法
274
查看次数

在 Windows 上等待进程或标准输出

我正在使用 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)

c++ windows

1
推荐指数
1
解决办法
1391
查看次数