Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编译可移植类库时是否有可与预处理器指令一起使用的符号_C#_Portable Class Library - Fatal编程技术网

C# 编译可移植类库时是否有可与预处理器指令一起使用的符号

C# 编译可移植类库时是否有可与预处理器指令一起使用的符号,c#,portable-class-library,C#,Portable Class Library,我在解决方案中添加了一个可移植类库,其中包含一个链接到所有项目的全局文件。此全局文件包含程序集级属性,如版本、区域性和Com可见性。我想解决的问题是,某些属性(如ComVisible)在PCL上下文中无效,因此是否有任何符号与#if一起使用,以防止在生成时包含该属性?您可以在生成属性中配置自己的预处理器符号。我不知道默认情况下是否有任何特定的可移植类库,但在项目的每个配置中指定一个并不困难。您可以在构建属性中配置自己的预处理器符号。我不知道默认情况下是否有任何特定的可移植类库,但在项目的每个配置

我在解决方案中添加了一个可移植类库,其中包含一个链接到所有项目的全局文件。此全局文件包含程序集级属性,如版本、区域性和Com可见性。我想解决的问题是,某些属性(如ComVisible)在PCL上下文中无效,因此是否有任何符号与#if一起使用,以防止在生成时包含该属性?

您可以在生成属性中配置自己的预处理器符号。我不知道默认情况下是否有任何特定的可移植类库,但在项目的每个配置中指定一个并不困难。

您可以在构建属性中配置自己的预处理器符号。我不知道默认情况下是否有任何特定的可移植类库,但在项目的每个配置中指定一个并不困难。

我通过向一个紧凑的框架项目中添加存根/虚拟属性类来克服这个问题,该项目模仿它们的FCL对应项:

// Shared source file
[ComVisible(true)]
public class Foo
{
}

// Dummy class in portable project -- exists only to facilitate compilation of the shared source file
namespace System
{
    [AttributeUsage(AttributeTarget.Class)]
    public class ComVisibleAttribute : Attribute
    {
        public ComVisibleAttribue(bool visible)
        {
            // Dummy implementation
        }
    }
}

现在,共享源代码文件将在两个项目中编译,而无需对代码进行任何修改,也无需任何预处理器指令。

我通过向一个紧凑的框架项目添加存根/伪属性类来克服这个问题,该项目模拟了它们的FCL对应项:

// Shared source file
[ComVisible(true)]
public class Foo
{
}

// Dummy class in portable project -- exists only to facilitate compilation of the shared source file
namespace System
{
    [AttributeUsage(AttributeTarget.Class)]
    public class ComVisibleAttribute : Attribute
    {
        public ComVisibleAttribue(bool visible)
        {
            // Dummy implementation
        }
    }
}

现在,共享源代码文件将在两个项目中编译,无需对代码进行任何修改,也无需任何预处理器指令。

谢谢Jon,我正在寻找内置的源代码文件,但这很有意义,而且节省了时间!谢谢Jon,我正在寻找一个内置的,但这是有意义的,节省时间!马特,谢谢你跳出框框思考!这也是一个可行的解决方案。@MattDavey很抱歉来晚了,但我认为这不是一个值得推荐的解决方案(如果我错了,请纠正我)。
ComVisibleAttribute
在PCL中不可用,但在大多数目标中都可用。因此,每当您想在特定目标(例如.NET应用程序)中使用PCL时,就会出现名称冲突。我认为您可以使用
TypeForwardedToAttribute
解决此问题,但我自己没有这样做的经验。Matt感谢您跳出框框思考!这也是一个可行的解决方案。@MattDavey很抱歉来晚了,但我认为这不是一个值得推荐的解决方案(如果我错了,请纠正我)。
ComVisibleAttribute
在PCL中不可用,但在大多数目标中都可用。因此,每当您想在特定目标(例如.NET应用程序)中使用PCL时,就会出现名称冲突。我认为您可以使用
TypeForwardedToAttribute
解决这个问题,但我自己没有这样做的经验。