Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
手写msbuild忽略c#dll的根命名空间_C#_.net_Dll_Msbuild - Fatal编程技术网

手写msbuild忽略c#dll的根命名空间

手写msbuild忽略c#dll的根命名空间,c#,.net,dll,msbuild,C#,.net,Dll,Msbuild,我正在进行一个自动化的c#构建,它要求我编写/生成csproj文件,然后使用命令行编译它。由于某种原因,虽然dll创建时没有问题,但它包含的类被转储到全局名称空间中,而不是我在中指定的名称空间中。有人知道这里发生了什么吗 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup

我正在进行一个自动化的c#构建,它要求我编写/生成csproj文件,然后使用命令行编译它。由于某种原因,虽然dll创建时没有问题,但它包含的类被转储到全局名称空间中,而不是我在中指定的名称空间中。有人知道这里发生了什么吗

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <OutputType>Library</OutputType>
        <RootNamespace>SimpleDependency.Test</RootNamespace>
        <AssemblyName>simpledependency.test</AssemblyName>
        <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
    </PropertyGroup>
    <ItemGroup>
        <Compile Include="*.cs" />
    </ItemGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <DebugType>pdbonly</DebugType>
        <Optimize>true</Optimize>
        <OutputPath>Bin\Release\</OutputPath>
        <DefineConstants>TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
    </PropertyGroup>
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
我知道它成功地生成了dll,因为我有另一个依赖项目,该项目使用我在此项目中定义的类,但如果我包括:

using SimpleDependency.Test;

在这段代码中,我收到编译错误,说它找不到名称空间“SimpleDependence”。如果没有这个using语句,它编译得很好,可以正常工作。有人有什么想法吗?

使用
/preprocess:flatten.proj
标志运行MSBuild。然后在XML编辑器中加载生成的文件。我最近的经验是,当属性没有被看到时,它会在以后的某个地方被覆盖(例如,设置而不是附加到属性上)或与条件有关的内容。这是一个好的开始。您还可以尝试获取MSBuildExplorer3,看看是否有结果。我不熟悉C#projects,但我认为您应该找到实际使用
$(RootNamespace)
来实现其效果的位置,并回溯:它是否由于某种条件而被忽略,没有获得您预期的目标变化,等等。一旦您了解情况,使用
/verbosity:diag
和grep运行MSBuild,查看它(应该)使用的目标,并查看它的想法。

将Pierre Luc的反馈复制到答案中:rootnamespace似乎只是在创建类时向IDE注入的建议。如果.cs文件没有指定名称空间,则rootnamespace将不会成为这些类的名称空间。有关该问题的更多信息,请参见

是否使用SimpleDependence.Test命名空间定义了类?定义根名称空间不会在没有名称空间的所有类中强制执行它。这就是定义根名称空间的全部要点,即不必在所有类中编写它。这本应是一个问题,这不是根命名空间的重点吗?我认为它不会覆盖没有任何显式命名空间的.cs文件。更多详情请参阅。明白。我想当您设置根命名空间时,visual studio必须将其注入到您创建的每个新类中。谢谢,原来我还有另一个问题,但这些技术(msbuildexplorer 3和preprocess:)肯定会帮助我在将来遇到其他问题时整理出更多信息。是的,当我解决这个问题时,知道如何找出发生了什么是主要的促成因素。
using SimpleDependency.Test;