手写msbuild忽略c#dll的根命名空间
我正在进行一个自动化的c#构建,它要求我编写/生成csproj文件,然后使用命令行编译它。由于某种原因,虽然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
<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;