2014-09-24 18 views
1

我正在开发一个自动化的c#构建,它需要我编写/生成csproj文件,然后使用命令行编译它。出于某种原因而创建DLL没有问题,它包含的类被转储到全局名称空间,而不是我已经指定的。有没有人知道这里可能会发生什么?手写的msbuild忽略cname dll的rootnamespace

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

我已经MSBuild的设置为.NET 4.0,和我在命令行运行此命令:

msbuild /property:Configuration=Release /property:Platform=AnyCPU 

我知道,它成功地生成的dll,因为我然后让另一个依赖项目使用课堂上,我在这个项目定义,但如果我有:

using SimpleDependency.Test; 

在代码中,我得到的编译错误说,它不能找到命名空间“SimpleDependency”。没有这个使用声明,它编译罚款和工作。任何人有任何想法?

+0

您的类是否使用SimpleDependency.Test命名空间定义?定义RootNamespace不会在没有名称空间的所有类中强制执行它。 – 2014-09-24 21:21:09

+0

这就是定义一个根名称空间的全部要点,就是不必将它写在所有的类 – Deleter 2014-09-25 17:30:55

+0

对不起,这应该是一个问题,是不是根名称空间的点? – Deleter 2014-09-25 17:55:08

回答

0

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

1

使用/preprocess:flattened.proj标志运行MSBuild。然后在XML编辑器中加载生成的文件。我最近的经验是,当物业没有被看到时,它会在稍后的某个地方被覆盖(例如设置而不是附加到它)或某些有关条件的地方。这是一个好的开始。您也可以尝试获取MSBuildExplorer3并查看是否会出现任何问题。我并不熟悉C#项目,但我认为你应该找到$(RootNamespace)实际上用于其效果的位置,并向后追溯:是否因条件而被忽略,没有获得预期的目标变化等等。一旦知道了躺在这片土地上,用/verbosity:diag运行MSBuild,然后grep通过它的目标(应该是),并看看它在想什么。

+0

谢谢,原来我有另一个问题,但这些技术(msbuildexplorer 3和预处理:)肯定会帮助我排除更多的信息,当我在将来遇到其他问题时。 – Deleter 2014-09-25 18:53:29

+0

是的,当我弄清楚这一点时,知道如何找出发生的是主要的推动因素。 – 2014-09-26 00:08:47